Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282

    [Sql] Unire i risultati di più query

    Salve,
    ho tre query ( Q1 , Q2 , Q3 ) oguna della quali estrae dei record (che possono essere sia uguali che diversi) e riporta dei calcoli fatti ognuna in colonne diverse (per la precisione sono delle query group e sono riepilogati per ognuna i totali in determinate condizioni).
    Come posso fare per avere una visione unitaria dei risultati?

    es:
    Q1 estrae i record R1,R2,R3.... con le colonne C1, C2, C3
    Q2 estrae i record R1, R5, R6... con le colonne C4, C5, C6
    Q3 estrae i record R2, R4, .... con le colonne C7, C8, C9

    vorrei ottenere:
    R1 colonne C1,C2,C3,C4,C5,C6,C7,C8,C9
    R2 colonne C1,C2,C3,C4,C5,C6,C7,C8,C9
    R3 colonne C1,C2,C3,C4,C5,C6,C7,C8,C9
    R4 colonne C1,C2,C3,C4,C5,C6,C7,C8,C9
    ecc...
    Quindi tutti i record estratti (indipendentemente dalle query) con tutti i campi (ovviamente a zero quelli non valorizzati.

    Grazie

  2. #2
    ad ogni query aggiungi

    0 as colonna_mancante (oppure "" se la colonna è testo)

    per tutte le colonne mancanti, poi vai di UNION


  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    Ottimo (anzi optime ),
    l'ho fatto e funziona, salvo il fatto che mi raggruppa i risultati su righe diverse... In pratica mi crea tre righe con lo stesso codice....
    Dove sbaglio?

    P.S.
    Grazie!

  4. #4

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    Originariamente inviato da optime
    posta la query
    select assenze.SC_CAU,MAX(tipi.CU_DES) as CU_DES,0 as SCAD_AP,0 as SCAD_AC,0 as SCAD_AS,0 as INCA_AP,0 as INCA_AC,0 as INCA_AS,SUM( CASE WHEN YEAR(assenze.SC_DTP)<2011 THEN assenze.SC_IMP ELSE 0 END ) as SOSP_AP,SUM( CASE WHEN YEAR(assenze.SC_DTP)=2011 THEN assenze.SC_IMP ELSE 0 END ) as SOSP_AC,SUM( CASE WHEN YEAR(assenze.SC_DTP)>2011 THEN assenze.SC_IMP ELSE 0 END ) as SOSP_AS from (assenze Left outer Join tipi on tipi.CU_KEY=assenze.SC_CAU) where (assenze.SC_CLA in (select aree.AR_CLA from aree ) AND assenze.SC_XXX = 'v' AND assenze.SC_IMC = 0) group by assenze.SC_CAU union all select assenze.SC_CAU,MAX(tipi.CU_DES) as CU_DES,0 as SCAD_AP,0 as SCAD_AC,0 as SCAD_AS,SUM( CASE WHEN YEAR(assenze.SC_INC)<2011 THEN assenze.SC_IMC ELSE 0 END ) as INCA_AP,SUM( CASE WHEN YEAR(assenze.SC_INC)=2011 THEN assenze.SC_IMC ELSE 0 END ) as INCA_AC,SUM( CASE WHEN YEAR(assenze.SC_INC)>2011 THEN assenze.SC_IMC ELSE 0 END ) as INCA_AS,0 as SOSP_AP,0 as SOSP_AC,0 as SOSP_AS from (assenze Left outer Join tipi on tipi.CU_KEY=assenze.SC_CAU) where (assenze.SC_CLA in (select aree.AR_CLA from aree ) AND assenze.SC_XXX = 'v') group by assenze.SC_CAU union all select assenze.SC_CAU,MAX(tipi.CU_DES) as CU_DES,SUM( CASE WHEN YEAR(assenze.SC_DTP)<2011 THEN assenze.SC_IMP ELSE 0 END ) as SCAD_AP,SUM( CASE WHEN YEAR(assenze.SC_DTP)=2011 THEN assenze.SC_IMP ELSE 0 END ) as SCAD_AC,SUM( CASE WHEN YEAR(assenze.SC_DTP)>2011 THEN assenze.SC_IMP ELSE 0 END ) as SCAD_AS,0 as INCA_AP,0 as INCA_AC,0 as INCA_AS,0 as SOSP_AP,0 as SOSP_AC,0 as SOSP_AS from (assenze Left outer Join tipi on tipi.CU_KEY=assenze.SC_CAU) where (assenze.SC_CLA in (select aree.AR_CLA from aree ) AND assenze.SC_XXX = 'v') group by assenze.SC_CAU order by 1

    provo a spiegarla...
    per ogni gruppo sommo i valori relativamente all'anno passato (in questo caso 2011), quelli precedenti e quelli successivi.
    ogni query fa la stessa cosa ma con condizioni diverse.
    vorrei ottenere questa unione di righe e colonne.
    con metodi tradizionali ottengo già il risultato ma penso che si può ottenere anche utilizzando correttamente le query.

    Grazie ancora

  6. #6
    in generale

    se hai

    select max(colonna1) as colonna1, 0 as colonna2 from tabella1 where anno=2010 group by tipo
    union
    select 0 as colonna1, max(colonna2) as colonna2 from tabella1 where anno=2011 group by tipo

    per avere una sola riga farai

    select max(colonna1), max(colonna2) from
    (
    select max(colonna1) as colonna1, 0 as colonna2 from tabella1 where anno=2010 group by tipo
    union
    select 0 as colonna1, max(colonna2) as colonna2 from tabella1 where anno=2011 group by tipo
    )
    group by tipo

    adatta il ragionamento alla tua query

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    Dal tuo esempio mi sembra di capire che dovrei fare una Union di più query all'interno di una query. Io invece ho semplicemente fatto la Union di tre query. Proverò come mi hai indicato. Grazie ancora. Ciao

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 © 2026 vBulletin Solutions, Inc. All rights reserved.