>Sapreste consigliarmi un modo per alleggerire questa query in
>modo da non dover fare 12 UNION, una per ogni mese, ma con un'unica
>SELECT che faccia tutto in automatico?
Ciao Hamelin [FL] ,
In SQL Server 2005 potresti ricorrere ad una semplice Common Table Expression (CTE):
USE tempdb;
GO
CREATE TABLE dbo.myTable(
TableID int NOT NULL IDENTITY PRIMARY KEY,
Number int NOT NULL,
Date1 datetime NOT NULL,
Date2 datetime NOT NULL
);
GO
INSERT dbo.myTable VALUES(1, '20060101', '20060202');
INSERT dbo.myTable VALUES(2, '20060101', '20060202');
INSERT dbo.myTable VALUES(3, '20060101', '20060202');
INSERT dbo.myTable VALUES(1, '20060201', '20060302');
INSERT dbo.myTable VALUES(1, '20060201', '20060101');
GO
WITH myCTE(Mese, Anno) AS
(
SELECT MONTH(Date1), YEAR(Date1)
FROM dbo.myTable
WHERE Date2 > CONVERT(char(6), DATEADD(mm, 1, Date1), 112) + '01'
)
SELECT
COUNT(*) AS Conteggio
, Mese
FROM myCTE
GROUP BY Mese, Anno;
GO
/* Output:
Conteggio Mese
----------- -----------
3 1
1 2
(2 row(s) affected)
*/
DROP TABLE dbo.myTable;
In SQL Server 2000 puoi sostituire la CTE con una vista.
>Grazie a tutti per l'aiuto
Prego.
Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org