透视更改日期

Lis*_*ken 1 pivot date sql-server-2008

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

-- #Test (temptable)
Branch_Name   C_Date     Percentage
Branch 1      20140107   90
Branch 1      20140108   82
Branch 2      20140107   85
Branch 2      20140108   86
Run Code Online (Sandbox Code Playgroud)

我想转移这些数据,但是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)).
Run Code Online (Sandbox Code Playgroud)

我试过了

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

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

Branch_Name   20140107   20140108
Branch 1      90         82
Branch 2      85         86
Run Code Online (Sandbox Code Playgroud)

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

任何帮助表示感谢 - 谢谢!

Dam*_*ver 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
Run Code Online (Sandbox Code Playgroud)

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

但希望这足以在SQL中完成,如果你确实需要转换回日期标题,那么可以使用消耗此结果集的任何内容来完成.