copio e incollo. lasciati ispirare
Di seguito riporto un concept ricavato da una UDF. Serve in quei casi in cui vanno raggruppati in un unico campo descrittivo n record di dettaglio. Nell'esempio il record master è "colori", i dettagli sono vari colori ("rosso", "verde", etc). La funzione può essere inserita nel DB come UDF e richiamata in-line in una select, passano il record master. Verranno ritornati, in varchar, tutti i record dettaglio raggruppati in elenco.
codice:
/* creazione tabelle master-detail*/
create table #MASTER(MasterID int, MasterDesc varchar(100))
create table #DETAILS(DetailID int, MasterID int, DetailDesc varchar(100))
/*inserimento dati master
insert into #MASTER (MasterID, MasterDesc) VALUES (1,'colori')
/*inserimento dati detail*/
insert into #DETAILS (DetailID, MasterID, DetailDesc) VALUES (1,1,'rosso')
insert into #DETAILS (DetailID, MasterID, DetailDesc) VALUES (2,1,'verde')
insert into #DETAILS (DetailID, MasterID, DetailDesc) VALUES (3,1,'giallo')
insert into #DETAILS (DetailID, MasterID, DetailDesc) VALUES (4,1,'blu')
/*select di prova con join master-detail*/
select * from #MASTER M inner join #DETAILS D on M.MasterID = D.MasterID
/*proof-of-concept funzione per unione dettagli da righe a singolo campo separato*/
declare @TableJoin varchar(max)
set @TableJoin = ''
select @TableJoin = @TableJoin + ', ' + DetailDesc
from #DETAILS D
where D.MasterID = 1
select SUBSTRING(@TableJoin,2,LEN(@TableJoin)-1)
/*pulizia temp*/
drop table #MASTER
drop table #DETAILS
versione leggermente più compatta
codice:
/*proof-of-concept funzione per unione dettagli da righe a singolo campo separato*/
declare @TableJoin varchar(max)
SELECT @TableJoin = COALESCE(@TableJoin + ', ', '') + DetailDesc
from #DETAILS D
where D.MasterID = 1
select @TableJoin