[SQL] SQL Server의 동적 피벗 테이블
SQLSQL Server의 동적 피벗 테이블
안녕하세요 다음 표를하고 난 상단에 될 수있는 EcoYear을 선회하고 싶지만 년의 설정 금액이 아니며 년은 언제든지 시작할 수 있습니다. 내가 패드 0 대신 null로 필요하므로 또한, 다른 경우는 다른 시작 연도를해야합니다.
CaseID EcoYear NetInv NetOil NetGas
38755 2006 123 2154 525
38755 2007 123 2154 525
38755 2008 123 2154 525
38755 2009 123 2154 525
38755 2010 123 2154 525
38755 2011 123 2154 525
38755 2012 123 2154 525
38755 2013 123 2154 525
38755 2014 123 2154 525
38755 2015 123 2154 525
38755 2016 123 2154 525
38755 2017 123 2154 525
38755 2018 123 2154 525
38755 2019 123 2154 525
38755 2020 123 2154 525
나는이처럼 보이는 테이블이 필요합니다 :
CaseID Item 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020
38755 NetInv
38755 NetOil
38755 NetGas
이것은 원래 액세스가 크로스 탭을 사용하여 이루어졌다.
해결법
-
==============================
1.이는 UNPIVOT 다음 PIVOT을 모두 사용하여 SQL 서버에서 수행 할 수 있습니다. 당신은 변환 할 수있는 열을 아는 경우 정적 버전은 다음과 같습니다
이는 UNPIVOT 다음 PIVOT을 모두 사용하여 SQL 서버에서 수행 할 수 있습니다. 당신은 변환 할 수있는 열을 아는 경우 정적 버전은 다음과 같습니다
select * from ( select CaseId, EcoYear, val, item from yourtable unpivot ( val for Item in (NetInv, NetOil, NetGas) )u ) x pivot ( max(val) for ecoyear in ([2006], [2007], [2008], [2009], [2010], [2011], [2012], [2013], [2014], [2015], [2016], [2017], [2018], [2019], [2020]) ) p
데모와 SQL 바이올린 참조
다이내믹 버전이 실행에 레코드를 결정합니다 :
DECLARE @colsPivot AS NVARCHAR(MAX), @colsUnpivot as NVARCHAR(MAX), @query AS NVARCHAR(MAX) select @colsPivot = STUFF((SELECT distinct ',' + QUOTENAME(EcoYear) from yourtable FOR XML PATH(''), TYPE ).value('.', 'NVARCHAR(MAX)') ,1,1,'') select @colsUnpivot = stuff((select ','+quotename(C.name) from sys.columns as C where C.object_id = object_id('yourtable') and C.name LIKE 'Net%' for xml path('')), 1, 1, '') set @query = 'select * from ( select caseid, ecoyear, val, col from yourtable unpivot ( val for col in ('+ @colsunpivot +') ) u ) x1 pivot ( max(val) for ecoyear in ('+ @colspivot +') ) p' exec(@query)
데모와 SQL 바이올린 참조
from https://stackoverflow.com/questions/12430512/dynamic-pivot-table-in-sql-server by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 삽입 속으로 ... 병합 ... 선택 (SQL 서버) (0) | 2020.04.22 |
---|---|
[SQL] 내가 필요로 할 종류의 무엇에 합류? (0) | 2020.04.22 |
[SQL] 어떤 장점이있다 : 자연 USING 절 대 가입 대 내부 가입? (0) | 2020.04.22 |
[SQL] 어떻게 데이터베이스에 같은 이름과 스키마하지만 다른 디렉토리에 텍스트 파일을 가져? (0) | 2020.04.22 |
[SQL] .NET 코드에서 중지 SQL 쿼리 실행 (0) | 2020.04.22 |