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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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)
1 2 3 4 5 6 7 | 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
1 2 3 4 5 6 7 8 9 | 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
mi è servito oggi… grande ale!
Leave a Reply