in
La comunità italiana dedicata a Sviluppatori e Architetti IT delle piattaforme Windows

[SQL] Semplificare query Union

Ultimo messaggio ricevuto il 12-12-2006 14.18 da MaxBo. 1 risposta(e).
Pagina 1 di 1 (2 elemento/i)
Ordina messaggi: Precedente Successivo
  • 09-11-2006 11.57

    [SQL] Semplificare query Union

    Saluti a tutti

    Da una tabella così composta:

    CREATE TABLE Tabella
    ( Id int primary key
    DataIn date
    DataOut date )

    INSERT INTO Tabella (Id, DataIn, DataOut) VALUES (1, '01/01/2006', '02/02/2006')
    INSERT INTO Tabella (Id, DataIn, DataOut) VALUES (2, '01/01/2006', '02/02/2006')
    INSERT INTO Tabella (Id, DataIn, DataOut) VALUES (3, '01/01/2006', '02/03/2006')
    INSERT INTO Tabella (Id, DataIn, DataOut) VALUES (4, '30/01/2006', '02/03/2006')
    INSERT INTO Tabella (Id, DataIn, DataOut) VALUES (5, '30/01/2006', NULL)

    Dovrei fare un conteggio di quanti Id ci sono attivi ogni mese: quindi quanti Id hanno la DataIn inferiore del mese considerato, e la DataOut maggiore del mese considerato o NULL. Quindi, in questo caso il risultato:

    [Mese] [Quanti]
    1 3    ----> l'1 il 2 e il 3
    2 3    ----> il 3 il 4 e il 5
    3 1    ----> Il 5

    Al momento ho risolto in modo piuttosto barbaro così:

    SELECT 1 AS Mese, COUNT(Id) AS Quanti
    FROM Tabella
    WHERE (DataIn <= '01/01/2006') AND (DataOut IS NULL OR DataOut >= '01/02/2006')
    UNION
    SELECT 2 AS Mese, COUNT(Id) AS Quanti
    FROM Tabella
    WHERE (DataIn <= '01/02/2006') AND (DataOut IS NULL OR DataOut >= '01/03/2006')
    ...

    Dite che c'è un modo per evitare di utilizzare 12 UNION (visto che la query peraltro è più pesante e gira anche su diversi anni)?

    Grazie mille a tutti fin d'ora per l'attenzione

    • Log
  • 12-12-2006 14.18 In risposta a

    • MaxBo
    • Utente Top 150
    • Registrato il 13-10-2006
    • Messaggi 6

    Re: [SQL] Semplificare query Union

    ciao
    si può fare in una select sola, usa il "case" 12 volte con le condizioni e crea 12 campi risultanti.
    select
    sum(case when datain between ...data.iniz..... and ...data fin... or datafin is null then 1 else 0 end) as mese1
    ..... mese2
    ........
    .... mese 12

    ciao
    • Log
Pagina 1 di 1 (2 elemento/i)
Prelevato da http://www.devspy.com/forums/p/4322/5084.aspx
DevSpy.com 6.0 © 2001-2008 - Alcuni Diritti Riservati
Salvo diversa indicazione, tutti i contenuti sono pubblicati sotto licenza "Creative Commons Attribution-Share Alike 3.0"