SORU
11 EKİM 2008, CUMARTESİ


Birçok satır tek bir metin dizesi halinde arada?

Veritabanı bir tablo, üç satır: isim tutarak düşünün

Peter
Paul
Mary

Kolay bir yolu Peter, Paul, Mary tek bir dize içine bu açmak için var mı?

CEVAP
13 ŞUBAT 2009, Cuma


Bir-çok ilişkileri ile iki tabloyu birleştirmek için çalışırken benzer bir sorun vardı. SQL 2005 XML PATH yöntemi satırları birleştirmeyi çok kolayca işleyebilir buldum.

Bir tablo ÖĞRENCİLERE verilir

SubjectID       StudentName
----------      -------------
1               Mary
1               John
1               Sam
2               Alaina
2               Edward

Sonucu bekleniyordu:

SubjectID       StudentName
----------      -------------
1               Mary, John, Sam
2               Alaina, Edward

Aşağıdaki T-SQL kullandım

Select Main.SubjectID,
       Left(Main.Students,Len(Main.Students)-1) As "Students"
From
    (
        Select distinct ST2.SubjectID, 
            (
                Select ST1.StudentName   ',' AS [text()]
                From dbo.Students ST1
                Where ST1.SubjectID = ST2.SubjectID
                ORDER BY ST1.SubjectID
                For XML PATH ('')
            ) [Students]
        From dbo.Students ST2
    ) [Main]

Eğer başında virgülleri herhangi bir parametre ve alt sorgu yapmana gerek yok yani ilk atlamak için kullanabilirsiniz eğer daha kompakt bir şekilde aynı şeyi yapabilirsiniz:

Select distinct ST2.SubjectID, 
    substring(
        (
            Select ',' ST1.StudentName  AS [text()]
            From dbo.Students ST1
            Where ST1.SubjectID = ST2.SubjectID
            ORDER BY ST1.SubjectID
            For XML PATH ('')
        ), 2, 1000) [Students]
From dbo.Students ST2

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Boiler Room

    Boiler Room

    10 Mayıs 2012
  • FRED

    FRED

    1 EKİM 2005
  • hanksranger

    hanksranger

    6 EKİM 2009