게시판
      
상위분류 : 잡필방 중위분류 : 서류가방 하위분류 : 전산과 컴퓨터
작성자 : 문시형 작성일 : 2017-01-02 조회수 : 4,429
제 목 : [MS-SQL] 결과값의 특정 행만 출력, WITH, ROW_NUMBER()

[MS-SQL] 결과값의 특정 행만 출력, WITH, ROW_NUMBER()

http://silganok.egloos.com/1716858

결과값에서 특정 행만 출력하는 방법이다.
EX)1000개의 결과값에서 100번째 행만 보고 싶다면?


WITH문과 ROW_NUMBER()를 사용해보자


ROW_NUMBER()
OVER()와 함께 쓰이며 정해진 정렬 순서로 행마다 숫자를 매길 수 있다.

ROW_NUMBER() OVER(ORDER BY [정렬할 컬럼명] [DESC OR ASC]) AS '열 컬럼명'




예시) Title, Writer, Price 세 컬럼이 있는 책 목록 테이블에 행 숫자를 매기고 싶다.

SELECT
ROW_NUMBER() OVER(ORDER BY Price ASC) AS 'No',
Title, Writer, Price
FROM Book

결과값

No/ Title / Writer / Price
 1 / 바보 / 홍길동 / 2000
 2 / 공책 / 자운영 / 4000
 3 / 소설 / 소설가 / 6000
....
....
....


 자 그럼 이 결과값에 No이라는 컬럼이 들어가보이니 위에 WHERE No = 3 하면 3번째 행만 나올거라고 나는 생각했다!

근데(당연한 얘기지만) 결과값을 테이블로 보지는 않는데다 Book 테이블에는 No 컬럼이 없으므로 에러가 떨어진다.


여기서 WITH문으로 결과값 자체를 임시로 테이블로 인식하게끔 해주어야 한다.

WITH문
위에도 말했듯 결과값을 임시 테이블로 만들어줌 

 - WITH 임시테이블명 AS
(
    SELECT 어찌고 FROM 테이블명
)




자 그럼 BookTemp 라는 No 컬럼이 포함된 임시 테이블을 만들어보고
WHERE문으로 3번째 행만 뽑아내보자.


WITH BookTemp AS
 (
  SELECT
  ROW_NUMBER() OVER(ORDER BY Price ASC) AS 'No',
  Title, Writer, Price
  FROM Book
 )
SELECT *
 FROM BookTemp 
 WHERE No = 3


결과값
No/ Title / Writer / Price
3 / 소설 / 소설가 / 6000


여러개의 결과값을 뽑아내고 싶다면 WHERE문에 IN을 주면 되겠지?
WHERE No in(3, 6, 9, ...)

| | 목록으로