SORU
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ş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Emotional Trancer

    Emotional Tr

    4 Mart 2010
  • Paulo Bautista

    Paulo Bautis

    21 Aralık 2008
  • sinumatic

    sinumatic

    19 Aralık 2006