Spaltenwerte als kommaseparierte Liste zurückgeben Teil 2

In diesem Beitrag haben wir uns mit der Rückgabe von Werten einer Spalte als separierte Liste beschäftigt. Vielfach sieht man aber auch die Anforderung, diese Liste auf der Basis eines bestimmten Schlüsselwertes zu generieren.

...

Zum Beispiel eine Liste, die alle Kunden-Nr und die dazugehörigen Bestellungen ausweist. Die XML Funktionalitäten des SQL Servers ab Version 2005 in Zusammenarbeit mit CROSS APPLY machen durchaus eine leichte Übung:

SELECT CustomerID, LEFT(MyCommaSeparatedList
       , LEN(MyCommaSeparatedList)-1) AS MyCommaSeparatedList
  FROM Northwind.dbo.Customers c 
  CROSS APPLY
  (SELECT CAST(OrderID AS NVARCHAR(10)) + ','
    FROM Northwind.dbo.Orders o
   WHERE o.CustomerID = c.CustomerID
   ORDER BY o.OrderID
     FOR XML PATH('')) AS x(MyCommaSeparatedList)

CustomerID MyCommaSeparatedList
---------- ------------------------------------------
ALFKI      10643,10692,10702,10835,10952,11011
ANATR      10308,10625,10759,10926
ANTON      10365,10507,10535,10573,10677,10682,10856

Ein weiterer angenehmer "Nebeneffekt" ist, daß man dadurch nicht mehr der 8000 Zeichen Grenze des VARCHAR Datentypen unterliegt, sondern der Grenze des XML Datentypen unterliegt, die bei ca. 2 GB liegt.

Noch kein Feedback
Einen Kommentar hinterlassen

Ihre E-Mail-Adresse wird nicht auf dieser Seite angezeigt.
SchlechtExzellent
(Zeilenumbrüche werden zu <br />)
(For my next comment on this site)
(Allow users to contact me through a message form -- Your email will not be revealed!)
Trackback-Adresse für diesen Eintrag

http://www.insidesql.org/blogs/htsrv/trackback.php?tb_id=1236