透视表中的SQL滚动日期(月)列
我正在制作一份36个月的滚动销售历史报告 我目前拥有的:透视表中的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
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;
你需要使用你现在拥有的是一个静态轴心