1
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 总是加到总和中,如果它为空,我将其设置为 0
  2. 如果 DateM2 不是 NULL AND DATE1 < DateM2 < DATE2,则将 M2 添加到总和中
  3. 如果 DateM3 不是 NULL AND DATE1 < DateM3 < DATE2,则将 M3 添加到总和中
  4. 如果 DateM4 不是 NULL AND DATE1 < DateM4 < DATE2,则将 M4 添加到总和

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

4

2 回答 2

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
于 2012-12-16T13:59:22.117 回答
1

试试这个:

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

SELECT ID, ISNULL(M1,0) +
CASE WHEN DateM2 不为 NULL 并且 DateM2 在 @Date1 和 @Date2 之间
则为 ISNULL(m2,0) ELSE 0 END +
CASE WHEN DateM4 不是 NULL 并且 DateM4 在 @Date1 和 @Date2 之间然后 ISNULL(m4,0) ELSE 0 END
AS [NameOfColumnHere]
FROM [TablenameHere]

于 2012-12-16T13:50:45.833 回答