2014-01-14 45 views
1

我有结果的脚本中设置是这样的:枢轴不断变化的日期

-- #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

试着把你的'IN' –

+0

@JorgeCampos子查询这是行不通的。 SQL Server要求Pivot中的值被修复 – Taryn

+0

感谢@bluefeet!和什么一塌糊涂(只是我的opnion):) –

回答

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中完成,如果您确实需要将其转换回日期标题,那么可以使用消费这个结果集。

+0

+1这是一个伟大的替代日期硬编码。如果日期不断变化,那么他们将不得不使用动态sql,这显然是更好的解决方案。 – Taryn