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