2014-10-23 5 views
0

나는 36 개월 판매 내역 보고서를 구축하고 있습니다.SQL 롤링 날짜 (월) 피벗 테이블의 열

내가 현재 무엇을 가지고 :

select 
"ItemTable"."ItemNum" 
, [1] MM01 
, [2] MM02 
, [3] MM03 
, ... 
from ( 
select 
"ItemTable"."ItemNum" 
, DateDiff(m, "SalesTable"."SalesDate", GetDate()) months_ago 
, "SalesTable"."SalesQty" - "SalesTable"."ReturnsQty" NetQty 
from your_table 
) as source 
pivot 
( 
sum(NetQty) For months_ago in ([1], [2], [3], ...) 
) as PivotTable 

다음 (위의 코드로) 내가 무엇을 비교하는 그림이며, 내가 원하는 :

current and desired result

가 어떻게이 변경합니까 내가 원하는 걸 얻으려고?

+1

사용해야하는 [동적 피벗 (http://social.technet.microsoft.com/wiki/contents/articles/17510.t-sql-dynamic-pivot-on-multiple -columns.aspx) 지금 가지고있는 것은 정적 피벗입니다. – Ram

답변

0

판매일 이후 개월 수를 얻기 위해 datediff를 사용하는 것으로 보입니다. 대신 영업일 열에서 동적 피벗을 수행 할 수 있습니다. 여기에 코드입니다 :

DECLARE @cols AS NVARCHAR(MAX), 
     @query AS NVARCHAR(MAX) 

select @cols = STUFF(
     (SELECT distinct ',['+datename(mm,SalesTable.SalesDate)+' of '+datename(year,SalesTable.SalesDate)+']' AS months_ago 
       FROM your_table 
     FOR XML PATH(''), TYPE 
     ).value('.', 'NVARCHAR(MAX)') 
    ,1,1,'') 


set @query = 'SELECT ItemNum, ' + @cols + ' 
from (select 
     ItemTable.ItemNum, 
     datename(mm,SalesTable.SalesDate)+'' of ''+datename(year,SalesTable.SalesDate)AS months_ago, SalesTable.SalesQty - SalesTable.ReturnsQty AS NetQty 
     from your_table 
) as source 
pivot 
( 
sum(NetQty) For months_ago in (' + @cols + ') 
) as PivotTable' 

execute sp_executesql @query;