Nil*_*are 0 sql sql-server sql-server-2008
我有下面的表结构,如下所示
Budhol COCODE BEN OBJ SPARE2 SPARE1 TASKNO Value Field Code
---------------------------------------------------------------------------------
362103 36 362101 991003 NULL MA1001 NULL 4516 613030 001
362104 36 362104 991003 NULL MA1001 NULL 9088 613030 002
362103 36 362101 991003 NULL MA1001 NULL 3387 613030 003
362103 36 362101 991003 NULL MA1001 NULL 4026 613030 004
Run Code Online (Sandbox Code Playgroud)
这是必需的输出
Budhol COCODE BEN OBJ SPARE2 SPARE1 TASKNO Value Field Code
---------------------------------------------------------------------------------
362103 36 362101 991003 NULL MA1001 NULL 11929 613030 001,003,001
362104 36 362104 991003 NULL MA1001 NULL 9088 613030 002
Run Code Online (Sandbox Code Playgroud)
即通过做我需要的所有值和逗号分隔代码的总和
我曾尝试过以下查询但输出不匹配我获取所有列的所有代码
SELECT
B.BEN, B.Budhol, B.COCODE, B.FIELD, B.OBJ, B.SPARE1, B.SPARE2,
SUM(B.value) AS Value ,
Code = STUFF((SELECT ', ' + Code
FROM #temp2 b
WHERE b.BEN = B.BEN
AND b.Budhol = B.Budhol
AND b.COCODE = B.COCODE
AND b.FIELD = B.FIELD
AND b.SPARE1 = B.SPARE1
AND b.SPARE2 = B.SPARE2
FOR XML PATH('')), 1, 1, '')
FROM
#temp2 B
GROUP BY
B.BEN, B.Budhol, B.COCODE, B.FIELD, B.OBJ, B.SPARE1, B.SPARE2;
Run Code Online (Sandbox Code Playgroud)
问题似乎与NULL某些列中的值有关.特别是,SPARE1和SPARE2列可以采用NULL值,您的意图是这些NULL值应该等同.在下面的查询中,我将它们包装在连接的两侧COALESCE,现在我得到了预期的输出.
SELECT B.BEN, B.Budhol, B.COCODE, B.FIELD, B.OBJ, B.SPARE1, B.SPARE2,
SUM(B.value) AS Value,
Code = STUFF((SELECT ', ' + Code FROM temp2 t
WHERE t.BEN = B.BEN AND t.Budhol = B.Budhol AND t.COCODE = B.COCODE AND
t.FIELD = B.FIELD AND
COALESCE(t.SPARE1, '') = COALESCE(B.SPARE1, '') AND
COALESCE(t.SPARE2, '') = COALESCE(B.SPARE2, '')
FOR XML PATH('')), 1,1, '')
FROM temp2 B
GROUP BY B.BEN, B.Budhol, B.COCODE, B.FIELD, B.OBJ, B.SPARE1, B.SPARE2;
Run Code Online (Sandbox Code Playgroud)