2012-05-03 3 views
0

#MonthlySales라는 테이블이 있는데 ItemNumber, MonYearNum을 위로 가져옵니다. & UnitsSold.SQL Server 피벗 테이블 - 동적

SELECT 
    ITEMNUMBER [SKU] 
    , ISNULL([1-2011], 0) [Jan 11] 
    , ISNULL([2-2011], 0) [Feb 11] 
    , ISNULL([3-2011], 0) [Mar 11] 
    , ISNULL([4-2011], 0) [Apr 11] 
    , ISNULL([5-2011], 0) [May 11] 
    , ISNULL([6-2011], 0) [Jun 11] 
    , ISNULL([7-2011], 0) [Jul 11] 
    , ISNULL([8-2011], 0) [Aug 11] 
    , ISNULL([9-2011], 0) [Sep 11] 
    , ISNULL([10-2011], 0) [Oct 11] 
    , ISNULL([11-2011], 0) [Nov 11] 
    , ISNULL([12-2011], 0) [Dec 11]

, ISNULL([1-2012], 0) [Jan 12] 
, ISNULL([2-2012], 0) [Feb 12] 
, ISNULL([3-2012], 0) [Mar 12] 
, ISNULL([4-2012], 0) [Apr 12] 
, ISNULL([5-2012], 0) [May 12] 
, ISNULL([6-2012], 0) [Jun 12] 
, ISNULL([7-2012], 0) [Jul 12] 
, ISNULL([8-2012], 0) [Aug 12] 
, ISNULL([9-2012], 0) [Sep 12] 
, ISNULL([10-2012], 0) [Oct 12] 
, ISNULL([11-2012], 0) [Nov 12] 
, ISNULL([12-2012], 0) [Dec 12] 

FROM #MONTHLYSALES PIVOT ( SUM (UNITSSOLD) MONTHYEARNUM FOR IN ( [1-2011] [2-2011], [3 : I는 다음 스크립트이 요동 2011], [4-2011], [5-2011], [6-2011], [7-2011], [8-2011], [9-2011], [10-2011], [11-2011] [12-2011] , [1-2012], [2-2012], [3-2012], [4-2012], [5-2012], [6-2012], [7-2012] , [8-2012], [9-2012], [10-2012], [11-2012], [12-2012] ) ) AS TOTSOLDPERMONTH ORDER BY ITEMNUMBER


위에서 보듯이 MonthYearNum 열은 1-2011과 같은 값으로 하드 코드됩니다. 그러나이 보고서는 동적이기 때문에이 코드를 하드 코딩 할 수 없습니다.이 보고서가 실행 된 날짜에 따라 MonthYearNum 값이 #monthlysales 테이블에서 반환됩니다.

반환되는 값을 동적으로 피벗 (pivot) 할 수있는 방법이 있습니까?

TIA

답변

1

예 - 동적 SQL 쓰기. 복잡한 코드이므로 비슷한 코드를 다시 쓰는 대신 (lazy) this question에 대한 저의 답변을 참조하십시오. 동적 unpivot 코드이지만 개념은 같습니다.

+0

안녕하세요, 감사합니다. 귀하의 예제에서, GetTableColumnNames 함수는 어떻게 생겼을까요? – Rivka

+0

이것은 실제 질문에 위 질문에 대한 코드가 게시 된 사람이 정의한 함수입니다. –

0

또는 출력되는 내용은 무엇입니까? SSRS, 보고서 작성기, Excel 및 대부분의 타사 보고서 도구는 교차 분석을 수행합니다.

+0

참. SQL의 동적 인 피벗은 키이스의 고된 고통입니다. –