SQL Server - Concatenare righe in colonne

Cosa faccio se voglio ottenere in un campo di una query il contenuto di una subquery che restituisce più righe? Ad esempio se voglio ottenere l’elenco dei prodotti venduti da un fornitore dalla tabella products del database Northwind?

Fino a ieri avrei fatto un cursore che interroga la tabella e concatena il risultato all’interno di una variabile; oggi un mio collega ha scoperto che esiste un metodo molto più semplice:

 

declare @productsName AS varchar(200)

 

select @productsName = COALESCE(@productsName, '') + ProductName + ','

      from products where supplierid = 7

 

select @productsName

 

Il risultato è esattamente quello che serviva:

 

---------------------------------------------------------------------

Pavlova,Alice Mutton,Carnarvon Tigers,Vegie-spread,Outback Lager,

 

(1 row(s) affected)

 

Da oggi prometto di non utilizzare più i cursori in queste situazioni.

 

Technorati Tags: ,

posted @ mercoledì 10 gennaio 2007 17:25

Print

Comments on this entry:

# re: SQL Server - Concatenare righe in colonne

Left by Barbara at 07/08/2007 17:20
Gravatar
perfetto, proprio quello che mi serviva! Grazie di aver postato questa soluzione per un problema che penso sia abbastanza comune :)

# re: SQL Server - Concatenare righe in colonne

Left by Daniele Proietti at 20/11/2009 19:09
Gravatar
Se ho capito bene la richiesta, io scriverei così:

declare @descr varchar(200);
select @descr = COALESCE(@descr, '') + descr + ', '
from st_prodotto
where cast(cod_Mprod as int) <= 5

select @descr

# re: SQL Server - Concatenare righe in colonne

Left by davide at 27/10/2011 20:11
Gravatar
ottimo! anch'io mi ero rotto dei cursori!
Comments have been closed on this topic.
«ottobre»
domlunmarmergiovensab
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456