일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 이클립스
- 전자정부
- 자바
- 형변환
- IBatis procedure
- 상속
- full text indexing
- 가변인자
- 야구게임
- Login with OAuth Authentication
- 스프링
- 추상클래스
- 페이징
- 전체텍스트
- 다운캐스팅
- Full text
- 25가지 효율적인 sql작성법
- Validations
- Random
- while
- 전체
- 상속예제
- angular2
- 다형성
- jquery
- 업캐스팅
- 단축키
- 자바 야구게임
- 로또
- Today
- Total
nalaolla
mssql 도 rownum 된다. 본문
mssql 도 rownum 된다.
페이징에 사용한 예>
- 한 페이지에 10개씩 출력되는 게시판의 첫번째 페이지.
- TEST_TABLE ( name varchar(20), regdate datetime) 라고 가정하고.
- SELECT *
- FROM (
- SELECT Row_Number() OVER (ORDER BY regdate DESC) AS rownum, *
- FROM TEST_TABLE
- ) T1
- WHERE rownum BETWEEN 1 AND 10
이렇게 하면된다.
아래는 온라인 설명서 이다.
SQL Server 2005 온라인 설명서(2008년 11월)
ROW_NUMBER(Transact-SQL)
업데이트: 2006년 7월 17일
결과 집합 파티션 내의 행 일련 번호를 반환합니다. 각 파티션의 첫 번째 행은 1로 시작합니다.
항목 링크 아이콘Transact-SQL 구문 표기 규칙
구문
복사
ROW_NUMBER ( ) OVER ( [ <partition_by_clause> ] <order_by_clause> )
인수
<partition_by_clause>
FROM 절이 생성한 결과 집합을 ROW_NUMBER 함수가 적용되는 파티션으로 나눕니다. PARTITION BY 구문은 OVER 절(Transact-SQL)을 참조하십시오.
<order_by_clause>
파티션에서 ROW_NUMBER 값이 행에 할당되는 순서를 결정합니다. 자세한 내용은 ORDER BY 절(Transact-SQL)를 참조하십시오. 순위 함수에 <order_by_clause>가 사용된 경우 정수는 열을 나타낼 수 없습니다.
반환 유형
bigint
주의
ORDER BY 절은 지정된 파티션 내에서 행에 고유 ROW_NUMBER가 할당되는 순서를 결정합니다.
예
ms186734.note(ko-kr,SQL.90).gif참고:
OVER 절의 ORDER BY는 ROW_NUMBER를 정렬합니다. 'Row Number'가 아닌 열 기준으로 정렬하는 SELECT 문에 ORDER BY 절을 추가하면 결과 집합은 외부 ORDER BY를 기준으로 정렬됩니다.
다음 예에서는 연간 판매 실적에 따라 AdventureWorks의 영업 사원에 대한 ROW_NUMBER를 반환합니다.
복사
- USE AdventureWorks;
- GO
- SELECT c.FirstName, c.LastName
- ,ROW_NUMBER() OVER(ORDER BY SalesYTD DESC) AS 'Row Number'
- ,s.SalesYTD, a.PostalCode
- FROM Sales.SalesPerson s
- INNER JOIN Person.Contact c
- ON s.SalesPersonID = c.ContactID
- INNER JOIN Person.Address a
- ON a.AddressID = c.ContactID
- WHERE TerritoryID IS NOT NULL
- AND SalesYTD <> 0;
다음 예에서는 행 번호 50부터 60까지의 행을 OrderDate순으로 반환합니다.
복사
- USE AdventureWorks;
- GO
- WITH OrderedOrders AS
- (
- SELECT SalesOrderID, OrderDate,
- ROW_NUMBER() OVER (ORDER BY OrderDate) AS 'RowNumber'
- FROM Sales.SalesOrderHeader
- )
- SELECT *
- FROM OrderedOrders
- WHERE RowNumber BETWEEN 50 AND 60;
다음 예에서는 PARTITION BY 인수를 사용하는 방법을 보여 줍니다.
복사
- USE AdventureWorks;
- GO
- SELECT c.FirstName, c.LastName
- ,ROW_NUMBER() OVER
- (PARTITION BY PostalCode ORDER BY SalesYTD DESC) AS 'Row Number'
- ,s.SalesYTD, a.PostalCode
- FROM Sales.SalesPerson s
- INNER JOIN Person.Contact c
- ON s.SalesPersonID = c.ContactID
- INNER JOIN Person.Address a
- ON a.AddressID = c.ContactID
- WHERE TerritoryID IS NOT NULL
- AND SalesYTD <> 0;
출처 : http://msdn.microsoft.com/ko-kr/library/ms186734(SQL.90).aspx
'MS-SQL' 카테고리의 다른 글
sql 암호화/복호화 (0) | 2015.12.20 |
---|---|
[MSSQLTIP] 동적쿼리 보안 취약점찾기, EXECUTE AS CALLER외의 내용 찾기 (0) | 2015.12.20 |
비용 발생하는 쿼리 찾아내기 (0) | 2015.12.20 |
[MSSQL 2012] MSSQL 2012에서 새롭게 추가된 페이징 쿼리 기법 (0) | 2015.12.20 |
거리계산 최종정리 (0) | 2015.12.20 |