我正在执行一个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)
答案 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)