SQL - 从其他列创建一个逗号分隔的列
SQL - Make a comma delimited column from other columns
我正在尝试创建一个列,其中它是一个逗号分隔的其他列的列表,其中 id 相同。我如何获取当前的查询并更新它以获得我期望的输出?
T1
PK
1
2
T2
ID
Name
T1.PK
1
Apple
1
2
Pear
1
3
Orange
1
4
Cat
2
5
Dog
2
我希望我可以加入这些表并获得以下结果。
PK
Name
1
Apple, Pear, Orange
2
Cat, Dog
我对如何完成这个有一个粗略的想法,但我没有看到如何分隔列表,而是我将每行得到 Apple、Pear、Orange、Cat、Dog,而不是将它们分开。这是我目前正在处理的查询。
select t1.PK,
stuff(
(select distinct ', ' + Name
from t2
for XML PATH ("")), 1, 2, '') Name
from t1
left join t2
select t1.PK,
stuff(
(select ', ' + Name
from t2
where t2.[t1.PK] = t1.PK
for XML PATH ('')), 1, 1, '') Name
from t1
我大约 12 年前回答过这个问题
在新的 SQL 服务器数据库中(自 SQL Server 2017 起),也可以使用 STRING_AGG
来达到此目的:
SELECT t1.pk, STRING_AGG (t2.name,', ') AS name
FROM t1 JOIN t2 ON t1.pk = t2.[t1.pk]
GROUP BY t1.pk;
我正在尝试创建一个列,其中它是一个逗号分隔的其他列的列表,其中 id 相同。我如何获取当前的查询并更新它以获得我期望的输出?
T1
PK |
---|
1 |
2 |
T2
ID | Name | T1.PK |
---|---|---|
1 | Apple | 1 |
2 | Pear | 1 |
3 | Orange | 1 |
4 | Cat | 2 |
5 | Dog | 2 |
我希望我可以加入这些表并获得以下结果。
PK | Name |
---|---|
1 | Apple, Pear, Orange |
2 | Cat, Dog |
我对如何完成这个有一个粗略的想法,但我没有看到如何分隔列表,而是我将每行得到 Apple、Pear、Orange、Cat、Dog,而不是将它们分开。这是我目前正在处理的查询。
select t1.PK,
stuff(
(select distinct ', ' + Name
from t2
for XML PATH ("")), 1, 2, '') Name
from t1
left join t2
select t1.PK,
stuff(
(select ', ' + Name
from t2
where t2.[t1.PK] = t1.PK
for XML PATH ('')), 1, 1, '') Name
from t1
我大约 12 年前回答过这个问题
在新的 SQL 服务器数据库中(自 SQL Server 2017 起),也可以使用 STRING_AGG
来达到此目的:
SELECT t1.pk, STRING_AGG (t2.name,', ') AS name
FROM t1 JOIN t2 ON t1.pk = t2.[t1.pk]
GROUP BY t1.pk;