我有一个结果集的脚本,如下所示:
-- #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天,不包括它运行的那天。
感谢任何帮助 - 谢谢!
答案 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中完成,如果你确实需要转换回日期标题,可以使用消费这个结果集来完成。