Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79

    [MS SQL] Concatenazione e cicli

    Salve a tutti,
    non sono un grandissimo esperto di MS SQL ed ho necessita' di replicare il sunzionamento di Group_Concat di MySQL.
    Ho 2 tabelle, la prima cosi' strutturata:

    IdPrenotazioneBB | IdPrenotazioneCamera |
    123 | 556
    123 | 557
    124 | 558
    125 | 559

    La seconda invece:

    IdPrenotazioneCamera | EtaOspite
    556 | 10
    556 | 35
    557 | 8
    558 | 29



    Per ogni IdPrenotazioneCamera devo ottenere la lista delle eta', ad es.
    556 | 10,35

    Qualche idea su come posso fare?


    Grazie,
    Haran

  2. #2
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Vedi qui http://www.mssqltips.com/sqlserverti...in-sql-server/
    il primo esempio: Using Coalesce to Pivot ed adattalo al tuo caso

  3. #3
    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

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.