【问题标题】:SQL Sum rows in a select case选择案例中的 SQL Sum 行
【发布时间】:2012-12-16 13:43:32
【问题描述】:
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 AND DATE1 ,则将 M2 添加到总和中
  3. 如果 DateM3 不为 NULL AND DATE1 ,则将 M3 添加到总和中
  4. 如果 DateM4 不是 NULL AND DATE1 ,则将 M4 添加到总和中

DATE1 和 DATE2 是查询中指定的变量,现在我的问题是我不知道用什么来提高性能我有数十条记录,如果我使用选择案例,欢迎你帮助你可以!

【问题讨论】:

  • 标签状态为 SQL Server 2008 R2
  • @twoleggedhorse - 不是。现在刚刚编辑。

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


【解决方案1】:

类似这样的:

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

【讨论】:

    【解决方案2】:

    试试这个:

    将@Date1 声明为日期时间
    将@Date2 声明为日期时间
    SET @Date1 = '01 Jan 1900' --在此处设置日期
    SET @Date2 = '01 Jan 1900' -- 在此处设置日期

    选择 ID,ISNULL(M1,0) +
    当 DateM2 不为空且 DateM2 在 @Date1 和 @Date2 之间的情况下,则为 ISNULL(m2,0) ELSE 0 END +
    当 DateM3 不为 NULL 且 DateM3 在 @Date1 和 @Date2 之间的情况下,则为 ISNULL(m3,0) ELSE 0 END +
    当 DateM4 不为空且 DateM4 在 @Date1 和 @Date2 之间的情况下,则为 ISNULL(m4,0) ELSE 0 END
    AS [NameOfColumnHere]
    FROM [TablenameHere]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-29
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      相关资源
      最近更新 更多