透视表中的SQL滚动日期(月)列

透视表中的SQL滚动日期(月)列,sql,sql-server,crystal-reports,crystal-reports-xi,Sql,Sql Server,Crystal Reports,Crystal Reports Xi,我正在制作一份36个月的滚动销售历史报告 我目前拥有的: select "ItemTable"."ItemNum" , [1] MM01 , [2] MM02 , [3] MM03 , ... from ( select "ItemTable"."ItemNum" , DateDiff(m, "SalesTable"."SalesDate", GetDate()) months_ago , "SalesTable"."SalesQty" - "SalesTable"."Ret

我正在制作一份36个月的滚动销售历史报告

我目前拥有的:

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 
下面是一张图片,比较了我拥有的(与上面的代码)和我想要的:


如何更改此值以获得所需的?

您似乎正在使用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;
你需要使用你现在拥有的是一个静态轴心