21 EYLÜL 2008, Pazar
Virgülle ayrılmış tek bir değer haline bir alt sorgu birden fazla sonuç birleştirin
İki tablo var:
TableA
------
ID, Name
TableB
------
ID, SomeColumn, TableA_ID (FK for TableA)
İlişki TableA
- TableB
birçok satır.
Şimdi, böyle bir sonuç görmek istiyorum
ID Name SomeColumn
1. ABC X, Y, Z (these are three different rows)
2. MNO R, S
Bu işe yaramaz (bir sorgu içinde birden çok sonuç):
SELECT ID, Name, (SELECT SomeColumn FROM TableB WHERE F_ID=TableA.ID) FROM TableA
Bu, istemci tarafında işleme yaparsam önemsiz bir sorundur. Ama bu X TableA
sonuçları numarasıdır her sayfada X sorguları çalıştırmak zorunda olacak anlamına gelecektir.
Sadece TableA
satır için birden çok sonuç döndürür gibi ya da ona benzer bir şey TARAFINDAN, bir GRUP yapamam unutmayın.
Eğer bir UDF, kullanan BİRLEŞİM ya da ona benzer bir şey işe yarayacak mı emin değilim?
CEVAP
21 Aralık 2009, PAZARTESİ
Hatta bu amaca hizmet edecek
Örnek veri
declare @t table(id int, name varchar(20),somecolumn varchar(MAX))
insert into @t
select 1,'ABC','X' union all
select 1,'ABC','Y' union all
select 1,'ABC','Z' union all
select 2,'MNO','R' union all
select 2,'MNO','S'
Sorgu:
SELECT ID,Name,
STUFF((SELECT ',' CAST(T2.SomeColumn AS VARCHAR(MAX))
FROM @T T2 WHERE T1.id = T2.id AND T1.name = T2.name
FOR XML PATH('')),1,1,'') SOMECOLUMN
FROM @T T1
GROUP BY id,Name
Çıkış:
ID Name SomeColumn
1 ABC X,Y,Z
2 MNO R,S
Bunu Paylaş:
Nasıl " için SQL Server bir işlevi...
Nasıl bir kayıt (select top 1) Her kay...
Nasıl bir SQL sorgu, birden fazla tabl...
Varlık çerçevesi etmeniz() sorgu Vardı...
BİRLEŞİM sorguları vs birden fazla sor...