使用2个日期字段

时间:2017-03-03 20:08:35

标签: sql-server tsql

我有一个包含Volume,OpenDate和CloseDate字段的表。我需要按月对卷数据进行汇总,并在其关闭的月份再次计算一次。我无法弄清楚将两个日期合并到分组中的正确方法以及在SUM()函数中使用的条件日期检查。

OpenDate        Volume  CloseDate
1/1/2016 00:00  8,000   1/1/2016 00:00
1/3/2016 00:00  10,000  2/3/2016 00:00
1/4/2016 00:00  20,000  Null
2/1/2016 00:00  8,000   2/5/2016 00:00
2/3/2016 00:00  10,000  3/1/2016 00:00
2/5/2016 00:00  20,000  Null

Expected Results    
Month       Volume
1/1/2016    46,000
2/1/2016    56,000
3/1/2016    10,000


    SELECT CAST(
           CAST(YEAR(OpenDate) AS VARCHAR(4) ) +
           '-' +
           CAST(MONTH(OpenDate)AS VARCHAR(2))  + 
           '-01'
           AS DATETIME) MonthYear,
           SUM (Volume) + 
           SUM( CASE WHEN CloseDate IS NOT NULL AND CloseDate = ???
                     THEN Volume
                     ELSE 0 
                 END
               )  Volume
      FROM ORDERS 
  GROUP BY CAST(
           CAST(YEAR(OpenDate) AS VARCHAR(4) ) +
           '-' +
           CAST(MONTH(OpenDate)AS VARCHAR(2))  + 
           '-01'
           AS DATETIME)

1 个答案:

答案 0 :(得分:5)

您可以使用union all并与OpenDate交换CloseDate,如下所示:

select 
    OpenDate = convert(varchar(10),dateadd(month, datediff(month, 0, OpenDate )  , 0),120)
  , Volumne = sum(Volume)
from (
  select OpenDate, Volume 
  from t
  union all 
  select CloseDate, Volume 
  from t
  where CloseDate is not null
  ) s
group by dateadd(month, datediff(month, 0, OpenDate )  , 0)

rextester演示:http://rextester.com/ZGZT62294

返回:

+------------+---------+
|  OpenDate  | Volumne |
+------------+---------+
| 2016-01-01 |   46000 |
| 2016-02-01 |   56000 |
| 2016-03-01 |   10000 |
+------------+---------+