SQL Query有助于获取每月值

时间:2015-09-16 14:27:17

标签: sql sql-server database select

我有一个查询,它基本上根据几个条件对当前月份的列进行求和。我希望得到每个月的价值,但似乎无法绕过它。

DECLARE @d1 DATETIME = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()),0);
DECLARE @d2 DATETIME = DATEADD(mm, DATEDIFF(mm, 0, GETDATE()) + 1, 0);

SELECT    sum(SUMCOL)   as Total 
FROM COVERAGE
where

(COVERAGE_START_DATE>=@d1 and COVERAGE_START_DATE< @d2 and not PROCESSED_DATE>=@d2)   or

(COVERAGE_START_DATE< @d1 and PROCESSED_DATE>=@d1 and PROCESSED_DATE<@d2)

我试图获得这个月

SELECT MONTH(PROCESSED_DATE)MONTH, sum(SUMCOL) as Total 

然后按月分组.........

GROUP BY  MONTH(COVERAGE_START_DATE)

然后意识到这不会因为我需要处理PROCESSED_DATE列而且也无法获得额外的逻辑。

无论如何,我会喜欢这方面的帮助。很明显,SQL查询不是我的事情:)必须有一种更有效(和正确)的方法,但我似乎无法绕过它。

1 个答案:

答案 0 :(得分:0)

使用HAVING子句。

SELECT MONTH(PROCESSD_DATE) AS MONTH, SUM(SUMCOL) AS Total
FROM COVERAGE
GROUP BY MONTH(PROCESSD_DATE)
HAVING ((COVERAGE_START_DATE BETWEEN @d1 AND @d2) AND PROCESSED_DATE <= @d2)
OR (COVERAGE_START_DATE < @d1 AND (PROCESSED_DATE BETWEEN @d1 AND @d2))