복붙노트

[SQL] SQL 서버에서 동적 SQL 피벗

SQL

SQL 서버에서 동적 SQL 피벗

이제 SQL 서버 2008이 쿼리를 실행하지만, 곧 SQL 리포팅 서비스에서 보고서를 만드는 이동 계획 :

SELECT * from ( SELECT Amount, Year, column1, column2,column3 from BUYSCTE ) BUY 

피벗이 인없이 쿼리 위의 실행 내 테이블 결과

Column1 | Column2 | Column3| FYYear| Amount|

 1           cat     dog      2011   50 
 1           cat     dog      2012   75
 1           cat     dog      2013   65
 2          fish     snake    2011   23
 2          fish     snake    2012   39
 2          fish     snake    2013   59
 .. 
 ..  
 ..                           2016

그래서 기본적으로 나는 이런 식으로 끝내고 결과를 원하는 :

Column1 | Column2 | Column3| 2011| 2012 | 2013 
 1           cat     dog      50    75     65
 2          fish     snake    23    39     59

쿼리 그래서 내가,이 내가 먼저 테이블 변수를 생성 일어날 수 있도록 함께 와서 그것을 동적 변수를 만들어 다음과 같이 피벗했다

declare @Year nvarchar(Max)
set @Year = STUFF(
(SELECT ', ' + quotename(FYYear)
from BUYSCTE Group By FYYear order by
FYYear For XML PATH(''))
, 1, 2, '');

상기 채우는 @ 년 값 [2012] [2011], [2013], [2014], [2015], [2016]

본인은 위의 SELECT @ 년에 변경을 선택하기 때문에 값이 올바르게 설정되어 있는지 만 확인하는 것을 알고

내가 거기 변경에서 위의 테이블 변수 후 선택

SELECT * from ( SELECT Amount, FYYear, column1, column2,column3 from BUYSCTE ) BUY 
PIVOT( SUM(Amount) FOR FYYear in ([@Year]) ) pvt

하지만 내 결과는이 끝나게

 Column1 | Column2 | Column3| @Year|
 1           cat     dog      null   
 2          fish     snake    null

내가 무엇을 잘못하고 있지? 내가 나 자신을 볼 수 없습니다 놓친 거지 뭔가 작은 것 같다. I는 SUM에서 집계 기능을 변경하는 경우에도 그것이 NULL 대신 @ 년 열 값에 0을 부여하는 COUNT

해결법

  1. ==============================

    1.당신은 가까이 있지만,이 작업을 위해 당신은 동적 SQL을 사용하여 PIVOT을 구성하고 다음을 실행해야합니다. 당신이 당신의 변수 @ 년을 채우고 난 후에, 당신은 같은 것을 할 필요가 :

    당신은 가까이 있지만,이 작업을 위해 당신은 동적 SQL을 사용하여 PIVOT을 구성하고 다음을 실행해야합니다. 당신이 당신의 변수 @ 년을 채우고 난 후에, 당신은 같은 것을 할 필요가 :

    DECLARE @Query VARCHAR(MAX)
    
    SET @Query = '
    SELECT * from ( SELECT Amount, FYYear, column1, column2,column3 from BUYSCTE ) BUY 
    PIVOT( SUM(Amount) FOR FYYear in ('+ @Year + ') ) pvt'
    
    EXEC(@Query)
    

    이 일을하기 전에하지만, 당신은이 링크를 살펴 보셔야합니다.

  2. from https://stackoverflow.com/questions/8327261/dynamic-sql-pivot-in-sql-server by cc-by-sa and MIT license