-- PIVOT 집계 대상 컬럼이 동일한 기준에 대해서 2 이상인 경우 하는 방법이다...

-- 기준이 없는 경우 ROW_NUMBER() 등으로 동일 집계 기준을 임의 생성한다.

-- 임의 생성 기준에 대해 GemID  GemEnchantLevel  두개 집계컬럼을 PIVOT 하는 방법이다.

 

USE tempdb

GO

 

if object_id('AA1') is not null drop table AA1

if object_id('AA2') is not null       drop table AA2

 

CREATE TABLE dbo.AA1(

        WorldItemID bigint NOT NULL,

        ItemID int NOT NULL,

        ItemCount tinyint NOT NULL,

)

 

CREATE TABLE dbo.AA2(

        WorldItemID bigint NOT NULL,  -- 아이템시리얼 FK

        GemWorldItemID bigint NOT NULL,       -- Gem 시리얼 PK

        GemID int NOT NULL,    -- Gem ID

        GemEnchantLevel tinyint NOT NULL, -- Gem 강화레벨

        mDate datetime NOT NULL -- 날짜  소켓박힌 순서정렬에 사용한다

)

GO

 

/*

insert into AA1 values (1,1001,3)

insert into AA1 values (2,1005,1)

insert into AA1 values (3,2001,0)

insert into AA1 values (5,2002,1)

 

insert into AA2 values (2,81,101,1,getdate())

insert into AA2 values (2,82,105,3,getdate())

insert into AA2 values (2,83,107,4,getdate())

 

*/

 

select * from AA1

select * from AA2

 

-- AA1 중에서 AA2  소켓정보가 있는 행들의 정보를 열로 표현해야 한다.

--  결과에서 GemID,GemEnchantLevel 두개를 PIVOT 해야한다.

-- 기준은 mDate 기준으로 생성해야 한다.

select

        a.WorldItemID, a.ItemID

,       ROW_NUMBER() OVER (PARTITION BY a.WorldItemID ORDER BY mDate ) as mNum

,       b.GemID

,       b.GemEnchantLevel

from AA1 a left outer join AA2 b on a.WorldItemID = b.WorldItemID

order by a.WorldItemID,b.mDate

 

 

 

SELECT

        WorldItemID, ItemID, ItemCount

 

,       MAX([1]) as Gem1

,       MAX([2001]) as GemEnchantLevel1

 

,       MAX([2]) as Gem2

,       MAX([2002]) as GemEnchantLevel2

 

,       MAX([3]) as Gem3

,       MAX([2003]) as GemEnchantLevel3

FROM (

        select

               a.WorldItemID, a.ItemID, a.ItemCount

        ,       ROW_NUMBER() OVER (PARTITION BY a.WorldItemID ORDER BY mDate ) as mNum

        ,       ROW_NUMBER() OVER (PARTITION BY a.WorldItemID ORDER BY mDate ) + 2000 as mNum2

        ,       b.GemID

        ,       b.GemEnchantLevel

        from AA1 a left outer join AA2 b on a.WorldItemID = b.WorldItemID

) SourceType

PIVOT

(

        MAX(GemID )

        FOR mNum IN ([1],[2],[3])

) AS PivotTable

PIVOT

(

        MAX(GemEnchantLevel )

        FOR mNum2 IN ([2001],[2002],[2003])

) AS PivotTable2

GROUP BY WorldItemID, ItemID, ItemCount

 

 


by 유효열 http://blog.naver.com/soundkey/220034980064



No. Subject Author Date Views
Notice SQL강좌: 챗GPT와 함께 배우는 SQL Server 무료 강좌 목차와 소개 (2023년 9월 업데이트) 코난(김대우) 2023.08.18 28138
Notice Python 무료 강좌 - 기초, 중급, 머신러닝(2023년 6월 업데이트) 코난(김대우) 2021.01.01 15436
1614 SQL Server 성능 테스트 프로그램 minsouk 2015.01.17 6091
1613 extended events 를 이용한 wait 분석 minsouk 2014.07.25 6287
» 동일기준에대해 복수컬럼 PIVOT 사용하기 열이 2014.06.27 23196
1611 SELECT / UPDATE / INSERT 쿼리를 쉽게 만들자... [1] Hisory 2014.05.12 10919
1610 ssms 자동 언어 변경이 되면, 이렇게 설정하세요 minsouk 2014.04.27 9605
1609 [QUERY] 그룹 번호 만들기 이스트럭(강동운) 2014.04.11 9018
1608 [QUERY]연승을 구해보자! [2] 이스트럭(강동운) 2014.04.11 9894
1607 VLF 이스트럭(강동운) 2014.04.11 8157
1606 extended events 용 excel view 공개 버전 minsouk 2014.04.07 6435
1605 [TIP] 한 라인에서 여러 테이블 삭제 하기. [3] 엘리엘1 2014.01.03 8654
1604 GhostRecord(인덱스에서 행 삭제시발생) jevida(강성욱) 2013.11.25 13589
1603 프로시저, 함수, 트리거 생성 정보 보기. jevida(강성욱) 2013.11.25 10666
1602 힙테이블에서 행을 삭제하면어떻게 처리 될까? [1] jevida(강성욱) 2013.11.25 9404
1601 SSMS의 디자이너에서 테이블 수정 시 발생하는 영향 [1] jevida(강성욱) 2013.11.25 10557
1600 SQL Server를 활용한 Perfmon 로그 저장 [1] jevida(강성욱) 2013.11.21 14871
1599 VLF 환경과 성능 jevida(강성욱) 2013.11.21 10126
1598 Block 모니터링 jevida(강성욱) 2013.11.21 8145
1597 추적파일을 테이블로 로드하기. jevida(강성욱) 2013.11.21 8931
1596 LOGON 트리거 jevida(강성욱) 2013.11.18 6593
1595 DeadLock(교착상태) 모니터 하기 [2] jevida(강성욱) 2013.11.18 11465





XE Login