我有以下声明:
SELECT Stuff(
(SELECT N', ' + activity FROM contact_categories FOR XML PATH(''),TYPE)
.value('text()[1]','nvarchar(max)'),1,2,N'')
这将在一个字符串中显示活动列中的所有信息。我想做的是将其作为一个字符串返回,但是对于每个主键。
所以在表格中它看起来像这样
Contact Activity
1 Green
1 Red
1 Blue
2 Green
2 Red
2 Blue
3 Green
3 Red
3 Blue
而不是将其显示为绿色,绿色,绿色,红色,红色,红色,蓝色,蓝色,蓝色。我希望它能显示出来:
1 Green, Red, Blue
2 Green, Red, Blue
3 Green, Red, Blue
我尝试添加from和where子句:
SELECT Stuff(
(SELECT N', ' + activity FROM contact_categories FOR XML PATH(''),TYPE)
.value('text()[1]','nvarchar(max)'),1,2,N'')
FROM contact_categories
WHERE contact_number = #
答案 0 :(得分:1)
SELECT distinct contact, Stuff(
(SELECT N', ' + activity FROM contact_categories t2 WHERE t1.contact = t2.contact FOR
XML PATH(''),TYPE).value('text()[1]','nvarchar(max)'),1,2,N'')
FROM contact_categories t1
答案 1 :(得分:1)
您应该使用GROUP BY
SELECT
contact,
Stuff(
(SELECT N', ' + activity FROM contact_categories WHERE Contact = S.Contact FOR XML PATH(''),TYPE)
.value('text()[1]','nvarchar(max)'),1,2,N'')
FROM contact_categories AS S
GROUP BY contact
答案 2 :(得分:0)
你考虑过使用LISTAGG吗?
SELECT contact,
listagg(activity, ', ') WITHIN GROUP (
ORDER BY 1) AS activity
FROM contact_categories
GROUP BY contact;
https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030