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

Share

novembre 20, 2010 · admin · One Comment
Posted in: Develop, Programmazione, SQL

One Response

  1. simone - marzo 31, 2011

    mi è servito oggi… grande ale!

Leave a Reply