我有一对一的select语句。
我希望来自Many的列中的结果显示为一行中的列。什么是最简单的方法。
表1
1 Joe
2 Jill
3 Bill
4 Jennifer
表2
1 Red
1 Yellow
1 Blue
2 Green
2 Black
4 Purple
结果
1 Joe Red, Yellow, Blue
2 Jill Green, Black
3 Bill
4 Jennifer Purple
答案 0 :(得分:0)
如果你有2017或Azure,那么string_agg()
可用并使用它。如果没有,则显示for xml路径方法:
可能是你最好的选择。
但是你可以在Aaron的博客中看到:https://sqlperformance.com/2016/12/sql-performance/sql-server-v-next-string_agg-performance string_Agg()是可行的方法。
答案 1 :(得分:0)
如果您使用的是Sql server 2017或SQL Azure,则可以使用String_Agg,如下所示:
Select t1.Id, t1.Name, String_agg(color,',') from #table1 t1
left join #table2 t2 on t1.Id = t2.Id
Group by t1.Id, t1.Name
如果您使用的是SQL Server< = 2016,则可以使用以下查询:
Select t1.Id, t1.Name, Colors = stuff((select ','+color from #table2 tt2 where tt2.id = t1.id for xml path('')),1,1,'')
From #table1 t1
Group by t1.Id, t1.Name
输出如下:
+----+----------+-----------------+
| Id | Name | Colors |
+----+----------+-----------------+
| 1 | Joe | Red,Yellow,Blue |
| 2 | Jill | Green,Black |
| 3 | Bill | NULL |
| 4 | Jennifer | Purple |
+----+----------+-----------------+