需要按年份将日期列拆分为多个列

时间:2011-10-20 14:28:54

标签: asp.net sql vb.net

我正在尝试按年将日期列拆分为多个列。如果我能在最后得到一个很棒的汇总小计。

我认为最好的方法是使用.NET datalist控件,但我愿意接受建议。

示例数据:

DATE     | SALES
1/1/2009 | 1234.56
2/1/2009 | 4567.89
3/1/2009 | 7890.12
...
1/1/2010 | 3456.78
...
1/1/2011 | 8901.23

期望的输出:

       2009     2010     2011
Jan    1234.56  3456.78  8901.23
Feb    4567.89  ...

提前致谢!

2 个答案:

答案 0 :(得分:3)

为什么不将它作为数据透视表进行查询,然后使用您认为最简单,最适合的任何前端显示它。

http://msdn.microsoft.com/en-us/library/ms177410.aspx

答案 1 :(得分:2)

你没有提到你的后端,但正如其他人提到的那样,PIVOT语法适用于当前版本的SQL和ORACLE。如果您的后端不支持,您也可以使用SUM/CASE

e.g。

SELECT MONTH([date]) AS mo, 
       SUM(CASE 
         WHEN YEAR([date]) = YEAR(Dateadd(YEAR, -2, Getdate())) THEN score
         ELSE 0 
       END)          AS y1, 
       SUM(CASE 
         WHEN YEAR([date]) = YEAR(Dateadd(YEAR, -1, Getdate())) THEN score 
         ELSE 0 
       END)           AS y2, 
       SUM(CASE 
         WHEN YEAR([date]) = YEAR(Getdate()) THEN score 
         ELSE 0 
       END)           AS y3 
FROM tablenamehere 
WHERE (vendor = 'vendornamehere') 
GROUP BY MONTH([date]) 

另一个选择是在C#代码中use Linq来转移数据。如果您已经将数据存储在内存中并且不想再次返回数据库,则此功能特别有用。

可以在Sample for 7837475

找到一个例子(使用Jon Skeets评分而不是销售)