T-Sql
如何從一行中的多行列印查詢?
在 SQL Server 2017 中,我有一個多對多表:
========================= id nameID phoneID ========================= 1 1 1 2 2 2 3 1 3
假設 nameID 1 是 NameTable 中 John 的 FK。phoneID 1 是 PhoneTable 中 01 234 567 的 FK,phoneID 3 是 02 345 678 的 FK。
當我
join
表格時,我得到兩行。====================== name phone ====================== John 01 234 567 John 02 345 678
但是,我需要一行中的字元串。如何在一行中列印姓名和電話,如下所示:
John, 01 234 567, 02 345 678
編輯 1:我在這裡找到了 Oracle 的類似問題和解決方案
LISTAGG
。Edit2:這是 T-SQL 的解決方案FOR XML PATH
。
這取決於您的 SQL Server 版本。在 SQL Server 2016 或更高版本中,您可以使用 STRING_AGG:
DECLARE @Names TABLE (ID INT IDENTITY, FirstName VARCHAR(25)) DECLARE @Phones TABLE (ID INT IDENTITY, Phone VARCHAR(25)) DECLARE @ManyToMany TABLE (ID INT IDENTITY, NameID INT, PhoneID INT) INSERT INTO @Names VALUES ('John'), ('Mike') INSERT INTO @Phones VALUES ('12 345 678'), ('00 987 654'), ('11 254 009') INSERT INTO @ManyToMany (NameID, PhoneID) VALUES (1, 1), -- John link #1 (1, 3), --John link #2 (2, 2) -- Mike link #1 SELECT n.FirstName AS [Name], STRING_AGG(p.[Phone], ',') AS [Phone] FROM @ManyToMany m INNER JOIN @Names n ON n.ID = m.NameID LEFT JOIN @Phones p ON p.ID = m.PhoneID GROUP BY n.FirstName
結果:
Name Phone ----------------------------- John 12 345 678,11 254 009 Mike 00 987 654