sql server - 一个月/一年内的总计

时间:2012-03-20 22:00:30

标签: sql-server-2008-r2

我正在执行一个sql server报告,该报告显示报告底部的每日,每月和每年总计运行情况。

我想出了如何通过取“timestamp”字段和getdate()的日期并返回= 0的行来执行每日报告。这样我知道日期的差异是0天,因此部分每日总数。

我遇到了一个关于用月和年做这件事的好方法的问题。这是我对月计算的查询,它给了我更多的结果(我还有另外一张桌子,我用它来仔细检查我的计算。我应该得到大约300作为我的总数,但下面的查询给了我相反,只有7400左右。

     SELECT     SUM(Rc0) AS Good, 
                      SUM(Rc0 + Rc1 + Rc2 + Rc3 + Rc4 + Rc5 + Rc6 + Rc7 + Rc8 + Rc9 + Rc10 + Rc11 + Rc12 + Rc13 + Rc14 + Rc15 + Rc16 + Rc17 + Rc18 + Rc19 + Rc20 + Rc21 + Rc22 + Rc23
                       + Rc24 + Rc25 + Rc26 + Rc27 + Rc28 + Rc29 + Rc30 + Rc31 + Rc32 + Rc33 + Rc34 + Rc35 + Rc36 + Rc37 + Rc38 + Rc39 + Rc40) AS Not_Good  
FROM         someTable WHERE     (MONTH(timestamp) = MONTH(GETDATE())) and (YEAR(timestamp) = YEAR(GETDATE()))

编辑:提供相同结果的替代查询形式

SELECT     SUM(Rc0) AS Good, 
                      SUM(Rc0 + Rc1 + Rc2 + Rc3 + Rc4 + Rc5 + Rc6 + Rc7 + Rc8 + Rc9 + Rc10 + Rc11 + Rc12 + Rc13 + Rc14 + Rc15 + Rc16 + Rc17 + Rc18 + Rc19 + Rc20 + Rc21 + Rc22 + Rc23
                       + Rc24 + Rc25 + Rc26 + Rc27 + Rc28 + Rc29 + Rc30 + Rc31 + Rc32 + Rc33 + Rc34 + Rc35 + Rc36 + Rc37 + Rc38 + Rc39 + Rc40) AS Not_Good
FROM         someTable
WHERE     convert(varchar(7), timestamp, 126) = convert(varchar(7), getdate(), 126)

1 个答案:

答案 0 :(得分:1)

- 作为一种通用的分组,包括大多数跨度......

选择     '年'= DATEPART(Yy,rowdate),     '月'= DATEPART(嗯,rowdate),     '周'= DATEPART(wk,rowdate),     '总'=总和(yournumericfield)

FROM sometable

GROUP BY     DATEPART(Yy,rowdate),     DATEPART(嗯,rowdate),     DATEPART(wk,rowdate)

ORDER BY     DATEPART(Yy,rowdate),     DATEPART(嗯,rowdate),     DATEPART(wk,rowdate)