Concatenazione di righe utilizzando FOR XML PATH
Riporto oggi un tip che a volte può tornare molto utile.
Può capitare di dover volere un elenco di elementi distribuiti su più righe visualizzati in un’unica riga e separati da una virgola o da qualsiasi altro carattere divisorio.
Vediamo come fare:
CREATE TABLE Products ( id INT PRIMARY KEY, product_desc VARCHAR(50)); INSERT INTO Products VALUES (1, 'Book'); INSERT INTO Products VALUES (2, 'DVD'); INSERT INTO Products VALUES (3, 'Blueray'); INSERT INTO Products VALUES (4, 'CD'); INSERT INTO Products VALUES (5, 'Magazine'); -- Primo step ci facciamo ritornare l'xml classico SELECT product_desc FROM Products ORDER BY product_desc FOR XML PATH('') --RESULT: <product_desc>Blueray</product_desc><product_desc>Book</product_desc><product_desc>CD</product_desc><product_desc>DVD</product_desc><product_desc>Magazine</product_desc>
Poi eliminiamo il TAG product_desc sostituendolo con il nostro carattere separatore (in questo caso usiamo la virgola)
SELECT ',' + product_desc FROM Products ORDER BY product_desc FOR XML PATH('') --RESULT: ,Blueray,Book,CD,DVD,Magazine
Adesso non rimane che eliminare il primo carattere, utilizziamo la funzione STUFF
SELECT STUFF(( SELECT ',' + product_desc FROM Products ORDER BY product_desc FOR XML PATH('')),1,1,'') --RESULT: Blueray,Book,CD,DVD,Magazine
fonte ufficiale: SQLSHARE
novembre 20, 2010
· admin · One Comment
Posted in: Develop, Programmazione, SQL
One Response
simone - marzo 31, 2011
mi è servito oggi… grande ale!
Leave a Reply