我有一个像(在sql server 2000中)
列的表MailCode Mode Name Group
-------- ----- --------- -------
1 1 abc 0
1 1 def 0
1 1 qwe 1
2 2 aaw 0
2 2 aad 0
我想根据文件的其余部分对Name字段进行分组,以便结果看起来像这样(应该只有一个唯一的mailCode,Mode和group组合)
MailCode Mode Names Group
--------- ------ ------------ -------
1 1 abc, def 0
1 1 qwe 1
2 2 aaw, aad 0
如何为此创建SQL查询?
答案 0 :(得分:1)
幸运的是,COALESCE is supported in 2000,因此您可以使用COALESCE技巧创建逗号分隔的值列表demonstrated in this link。由于变量的使用,您需要创建一个函数/过程并在主查询中调用它。基本上,只需用函数调用替换下面查询中的STUFF()。
SELECT x.mailcode,
x.mode,
STUFF((SELECT y.name
FROM TABLE y
WHERE y.mailcode = x.mailcode
AND y.mode = x.mode
AND y.gropu = x.group
GROUP BY y.mailcode, y.mode, y.group
FOR XML PATH(', ')), 1, 1, '') AS name,
x.group
FROM TABLE x
GROUP BY x.mailcode, x.mode, x.group
答案 1 :(得分:1)
我有一个类似的问题,我必须在select中连接一个字段,我当时的解决方案是创建一个返回结果的过程,并像这样调用它
选择x为field1,y为field2,dbo.procedure为field3
答案 2 :(得分:0)
我想不出一个能够得到你想要的结果的简单查询,但是这些方面的一些逻辑可以让你到达你想要的地方:
1) Loop through distinct MailCode, Mode, Group Rows
A) select all names in group
A.1) Loop through names
A.2) Concatenate them together into temp variable
B) insert all data (MailCode, Mode, Group, temp variable) into temp table
在涉及大型数据集时,在SQL中循环,往往会产生巨大的性能损失。遗憾的是,我不知道更好的方法。