【问题标题】:SQL Query help getting monthly valuesSQL 查询帮助获取每月值
【发布时间】:2015-09-16 14:27:16
【问题描述】:

我有一个查询,它基本上根据几个条件对当前月份的一列求和。我想获得每个月的价值,但似乎无法理解它。

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 查询不是我的事 :) 必须有一种更有效(和正确)的方法,但我似乎无法理解它。

【问题讨论】:

标签: sql sql-server database select


【解决方案1】:

使用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))

【讨论】:

  • 使用上面的例子,我该如何解决 -- HAVING 子句中的“COV.Coverage_Start_Date”列无效,因为它既不包含在聚合函数也不包含在 GROUP BY 子句中。并且列 'COV.Processed_Date' 在 HAVING 子句中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中。抱歉,我刚刚开始学习其中的一些内容。
猜你喜欢
  • 1970-01-01
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2019-08-24
  • 2015-04-07
  • 2016-08-10
相关资源
最近更新 更多