透视更改日期

时间:2014-01-14 15:47:00

标签: sql-server-2008 date pivot

我有一个结果集的脚本,如下所示:

-- #Test (temptable)
Branch_Name   C_Date     Percentage
Branch 1      20140107   90
Branch 1      20140108   82
Branch 2      20140107   85
Branch 2      20140108   86

我想调整这些数据,但是C_Date会填充7天以上:

WHERE     (1 = 1) AND
       (tTable.C_Date > CONVERT(VARCHAR(10),GETDATE() -7, 112)) AND
       (tEnter.C_Date < CONVERT(VARCHAR(10),GETDATE() -1, 112)).

我试过

Select * from #Test
pivot (avg (Percentage) for C_date in ([20140107],[20140108])) as PivotTable

它给了我想要的数据(见下文),

Branch_Name   20140107   20140108
Branch 1      90         82
Branch 2      85         86

但是如何让枢轴查看由GETDATE填充的日期?我已经尝试在每个[]中放置GETDATE命令,但这显然不起作用。 **注意,我的示例显示了2天,但我的查询是7天,不包括它运行的那天。

感谢任何帮助 - 谢谢!

1 个答案:

答案 0 :(得分:5)

尝试使用“C_Date和今天之间的天数”,而不是尝试使用日期。

早期(在子查询或CTE中)你做DATEDIFF(day,C_Date,GETDATE()) as NumDays

然后,您可以将您的位置WHERE NumDays between 1 and 7和您的支点过滤为:

pivot (avg (Percentage) for NumDays in ([1],[2],[3],[4],[5],[6],[7])) as PivotTable

现在,它可以处理您需要的大部分内容。我们不能做的一件事(在纯SQL中)是将这些列名转换回日期 - 因为任何特定的SQL查询都必须生成一个具有固定“形状”的结果集 - 数字,名称和列的类型是固定的。

但希望这足以在SQL中完成,如果你确实需要转换回日期标题,可以使用消费这个结果集来完成。