我有一个查询,它基本上根据几个条件对当前月份的列进行求和。我希望得到每个月的价值,但似乎无法绕过它。
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查询不是我的事情:)必须有一种更有效(和正确)的方法,但我似乎无法绕过它。
答案 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))