SQL在select case中的Sum行

时间:2012-12-16 13:43:33

标签: sql date select sql-server-2008-r2 sum

ID    M1      M2       M3    M4       DateM2        DateM3      DateM4 
1     2       NULL     NULL  NULL     NULL          NULL        NULL
2     NULL     2       1     1        11.11.2011    15.11.2011  20.11.2011
3     1       NULL     NULL  NULL     NULL          NULL        NULL
4     2       3        1     2        11.12.2012    12.12.2012  13.12.2012
5     1       1        1     1        11.10.2012    12.10.2012  13.10.2012
6     2       2        2     2        12.9.2012     12.12.2012  1.2.2013

我想生成下表,其中包含ID列和新列

ID M1+M2+M3+M4
1  2
2  4
3  1
4  8
5  4
6  8

新列将是M1 + M2 + M3 + M4,具有以下规则

  1. M1总是添加到总和中,如果它的null我将其设置为0
  2. 如果DateM2不是NULL并且DATE1<
  3. M2加到总和中。 DateM2< DATE2
  4. 如果DateM3不是NULL并且DATE1<
  5. 则将M3添加到总和中。 DateM3< DATE2
  6. 如果DateM4不是NULL并且DATE1<
  7. M4被添加到总和中。 DateM4< DATE2
  8. DATE1和DATE2是查询中指定的变量,现在我的问题我不知道该怎么用于表现我有几十个记录,如果我使用精选案例,欢迎你帮助你的方式可以!

2 个答案:

答案 0 :(得分:2)

这样的事情:

SELECT
t.ID,
isnull(t.M1,0)+
CASE WHEN t.DateM2 is not null AND @DATE1 < t.DateM2 < @DATE2
     THEN t.M2
     ELSE 0 END +
CASE WHEN t.DateM3 is not null AND @DATE1 < t.DateM3 < @DATE2
     THEN t.M3 
     ELSE 0 END +
CASE WHEN t.DateM4 is not null AND @DATE1 < t.DateM4 < @DATE2
     THEN t.M4 
     ELSE 0 END AS 'M1+M2+M3+M4'
FROM Table1 t

答案 1 :(得分:1)

试试这个:

  

DECLARE @ Date1 AS DATETIME
  DECLARE @ Date2 AS DATETIME
  SET @ Date1 = '01 Jan 1900' - 设置日期在这里
  SET @ Date2 = '01 Jan 1900' - 设置日期在这里

  SELECT ID,ISNULL(M1,0)+
  例如,当DateM2不为NULL且DateM2 BETWEEN @ Date1 AND @ Date2那么ISNULL(m2,0)ELSE 0 END   +
  例如,当DateM3不为NULL且DateM3 BETWEEN @ Date1 AND @ Date2那么ISNULL(m3,0)ELSE 0 END   +
  例如,当DateM4不为NULL且DateM4 BETWEEN @ Date1 AND @ Date2那么ISNULL(m4,0)ELSE 0 END   
AS [NameOfColumnHere]
  FROM [TablenameHere]