안녕하세요. 이스트럭(강동운) 입니다.


이번에도 sqler 질문에 올라온 글입니다 ^^


바로 그룹번호가 없을 때 RANK 함수를 이용해서 그룹번호를 효과적으로 만들 수 있는 방법입니다~!


질문 링크!!


불쥐님의 RANK 함수 정리!!


CREATE TABLE #TEMP ( NO INT , DATA CHAR(1) ,TNO INT )

INSERT #TEMP

VALUES (1,'A',1),

  (2,'A',0),

  (3,'A',0),

  (4,'B',1),

  (5,'B',0),

  (6,'B',0),

  (7,'C',1),

  (8,'C',0),

  (9,'A',1),

  (10,'A',0),

  (11,'A',0),

  (12,'B',1),

  (13,'B',0),

  (14,'B',0),

  (15,'C',1),

  (16,'C',0),

  (17,'C',0),

  (18,'A',1),

  (19,'A',0),

  (20,'B',1),

  (21,'B',0),

  (22,'C',1),

  (23,'C',0),

  (24,'D',1),

  (25,'D',0)

GO


SELECT * FROM  #TEMP

1.png


SELECT

NO - RANK() OVER(PARTITION BY DATA ORDER BY NO) AS FIRST_GROUP_NO

, NO

, DATA

, TNO

FROM #TEMP


사실 이 쿼리 가지고 효과적으로 그룹번호를 만들 수 있습니다.

SEQUENCE가 없다면.. ROW_NUMBER로 먼저 가공후에 만들 수도 있겠네요~!


2.png


SELECT

FIRST_GROUP_NO

, MAX(NO) OVER(PARTITION BY FIRST_GROUP_NO) AS SECOND_GROUP_NO

, NO

, DATA

, TNO

FROM

(

SELECT

NO - RANK() OVER(PARTITION BY DATA ORDER BY NO) AS FIRST_GROUP_NO

, NO

, DATA

, TNO

FROM #TEMP

) AA

3.png




SELECT

NO

, DATA

, TNO

, DENSE_RANK() OVER(ORDER BY SECOND_GROUP_NO)

FROM

(

SELECT

FIRST_GROUP_NO

, MAX(NO) OVER(PARTITION BY FIRST_GROUP_NO) AS SECOND_GROUP_NO

, NO

, DATA

, TNO

FROM

(

SELECT

NO - RANK() OVER(PARTITION BY DATA ORDER BY NO) AS FIRST_GROUP_NO

, NO

, DATA

, TNO

FROM #TEMP

) AA

) BB

ORDER BY NO


4.png


감사합니다 ^^


혹시 더 좋은 쿼리 있으면 공유해주세요 ^^

No. Subject Author Date Views
Notice 2023년 1월 - SQLER의 업데이트 강좌 리스트 코난(김대우) 2023.01.02 451
1626 SSMS 최근 사용한 파일에 대한 설정 변경 jevida(강성욱) 2015.03.25 3699
1625 SSMS 상위 행 선택 및 수정 행 변경 jevida(강성욱) 2015.03.25 7103
1624 SSMS에서 변경 스크립트 자동 생성 jevida(강성욱) 2015.03.25 4110
1623 SSMS 명령 단축키 설정 jevida(강성욱) 2015.03.25 6671
1622 Min / Max Server Memory 설정 jevida(강성욱) 2015.03.24 14027
1621 Tempdb 장애 유형과 해결방안.(디스크 공간 및 경로 문제) jevida(강성욱) 2015.03.24 5363
1620 SQL Server ErrorLog에 백업 로그 남지기 않기 jevida(강성욱) 2015.03.24 4088
1619 SQL Server의 Errorlog는 어디에 저장 될까? jevida(강성욱) 2015.03.24 3783
1618 통계(Statistics) jevida(강성욱) 2015.03.23 5757
1617 활성 트랜잭션 찾기 jevida(강성욱) 2015.03.23 4068
1616 ForwardedRecord (행 이동에 대한 포워드) jevida(강성욱) 2015.03.23 3415
1615 인덱스 생성 순서에 따른내부 작업 변화 jevida(강성욱) 2015.03.23 5092
1614 SQL Server 성능 테스트 프로그램 minsouk 2015.01.17 6024
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6275
1612 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 21653
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10888
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9584
» [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 8767
1608 [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9619
1607 VLF 이스트럭(강동운) 2014.04.11 8107





XE Login