본문 바로가기
컴퓨터관련/MS-SQL

[MS-SQL]행 일련번호 가져오기

by 빛과 어둠사이 2019. 3. 21.
728x90
반응형
SMALL

이번에는 행 일련번호를 가져오는 방법에 대해서 정리를 해보고자 합니다.

Oracle에서는 ROWNUM 함수가 있어서

쉽게 가져올 수 있었습니다.

그런데 SQL SERVER 에서는 쉽게 가져올 수는 없네요..

가져올 수 있는 방법은 있지만

Oracle에 비해서 MS-SQL이 더 복잡하고 하네요.


방법은 ROW_NUMBER 함수를 이용하는 것입니다.


우선, Microsoft에 나와있는 설명을 가지고 오도록 하겠습니다.

결과 집합의 출력 번호를 지정합니다. 보다 구체적으로는, 결과 집합 파티션 내의 행 일련 번호를 반환합니다. 각 파티션의 첫 번째 행은 1로 시작합니다.

ROW_NUMBER와 RANK는 유사합니다. ROW_NUMBER는 모든 행의 번호를 순차적으로 지정합니다(예: 1, 2, 3, 4, 5). RANK는 순위 동률(예: 1, 2, 2, 4, 5)에 대해 동일한 숫자 값을 제공합니다.


구문은 

ROW_NUMBER ( )   

    OVER ( [ PARTITION BY value_expression , ... [ n ] ] order_by_clause )

이렇게 사용.


예)

SELECT 

  ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#,

  name, recovery_model_desc

FROM sys.databases 

WHERE database_id < 5;


https://docs.microsoft.com/ko-kr/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017



마이크로소프트에서는 위처럼 설명이 되어있네요.

실제로 사용하는 방법은 다음과 같습니다.
샘플로 쿼리를 하나 작성하도록 하겠습니다.
SELECT 
  ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#,
  name, recovery_model_desc
FROM sys.databases 
WHERE database_id < 5;

위처럼 쿼리를 작성하게 된다면,
아래 이미지처럼 나오게 됩니다.

ROW_NUMBER 함수를 사용하기 위해서는
ORDER BY절이 꼭 필요해요.
이 때, 정렬 기준을 변경하면 다르게도 나오기도 합니다.

SELECT 
  ROW_NUMBER() OVER(ORDER BY name ASC) AS Row#,
  name, recovery_model_desc
FROM sys.databases 
WHERE database_id < 5;
위 쿼리처럼 입력을 하게 된다면
결과는 아래처럼 나오게 됩니다.



보시면 정렬 기준만 틀린 상황이고,

결과는 정렬된 값이 다르게 나오고 있습니다.


즉, 해당 컬럼을 기준으로 정렬을 하면서

행 일련번호를 가져오게 하는 것입니다.


뭔가 좀 아쉽지만

어쩔 수 없네요.



이상으로 MS-SQL에서 순차적으로 행 일련번호를 가져오는 방법이였습니다~



728x90
반응형
LIST