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

Code Emotion 2012
One Response
mi è servito oggi… grande ale!
Leave a Reply