Torna al Thread

USE tempdb; GO CREATE TABLE Fatture ( Codice int NOT NULL , Data smalldatetime NOT NULL , Importo decimal(10,2) NOT NULL , CONSTRAINT PK_Fatture PRIMARY KEY CLUSTERED ( Codice ) ) GO INSERT INTO Fatture (Codice, Data, Importo) VALUES (1, '20070810', 10) INSERT INTO Fatture (Codice, Data, Importo) VALUES (2, '20071020', 10) INSERT INTO Fatture (Codice, Data, Importo) VALUES (3, '20080110', 10) INSERT INTO Fatture (Codice, Data, Importo) VALUES (4, '20080111', 30) INSERT INTO Fatture (Codice, Data, Importo) VALUES (5, '20080112', 40) -- INSERT INTO Fatture (Codice, Data, Importo) VALUES (6, '20080320', 10) -- INSERT INTO Fatture (Codice, Data, Importo) VALUES (7, '20080510', 10) INSERT INTO Fatture (Codice, Data, Importo) VALUES (8, '20080515', 20) -- INSERT INTO Fatture (Codice, Data, Importo) VALUES (9, '20080620', 10) -- INSERT INTO Fatture (Codice, Data, Importo) VALUES (10, '20081010', 10) -- INSERT INTO Fatture (Codice, Data, Importo) VALUES (11, '20081120', 30) INSERT INTO Fatture (Codice, Data, Importo) VALUES (12, '20081125', 30) INSERT INTO Fatture (Codice, Data, Importo) VALUES (13, '20081130', 30) -- INSERT INTO Fatture (Codice, Data, Importo) VALUES (14, '20081210', 10) INSERT INTO Fatture (Codice, Data, Importo) VALUES (15, '20081220', 20) INSERT INTO Fatture (Codice, Data, Importo) VALUES (16, '20090110', 10) INSERT INTO Fatture (Codice, Data, Importo) VALUES (17, '20090220', 10) GO -- creo la tabella dei mesi CREATE TABLE mesi (mese tinyint) INSERT INTO mesi (mese) VALUES (1) INSERT INTO mesi (mese) VALUES (2) INSERT INTO mesi (mese) VALUES (3) INSERT INTO mesi (mese) VALUES (4) INSERT INTO mesi (mese) VALUES (5) INSERT INTO mesi (mese) VALUES (6) INSERT INTO mesi (mese) VALUES (7) INSERT INTO mesi (mese) VALUES (8) INSERT INTO mesi (mese) VALUES (9) INSERT INTO mesi (mese) VALUES (10) INSERT INTO mesi (mese) VALUES (11) INSERT INTO mesi (mese) VALUES (12) -- soluzione con funzioni sulle date (subquery) SELECT M.Mese , COALESCE(P.ImportoTotale, 0) AS Totale FROM mesi AS M LEFT JOIN ( SELECT Mese = MONTH(Data) , ImportoTotale = SUM(Importo) FROM Fatture WHERE Data >= '20080101' AND Data < '20090101' GROUP BY MONTH(Data) ) AS P ON P.Mese = M.Mese -- soluzione UNION SELECT 1 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080101' AND Data < '20080201' UNION SELECT 2 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080201' AND Data < '20080301' UNION SELECT 3 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080301' AND Data < '20080401' UNION SELECT 4 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080401' AND Data < '20080501' UNION SELECT 5 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080501' AND Data < '20080601' UNION SELECT 6 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080601' AND Data < '20080701' UNION SELECT 7 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080701' AND Data < '20080801' UNION SELECT 8 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080801' AND Data < '20080901' UNION SELECT 9 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20080901' AND Data < '20081001' UNION SELECT 10 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20081001' AND Data < '20081101' UNION SELECT 11 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20081101' AND Data < '20081201' UNION SELECT 12 As Mese, COALESCE(SUM(Importo),0) AS Totale FROM Fatture WHERE Data >= '20081201' AND Data < '20090101' DROP TABLE Fatture DROP TABLE mesi GO
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5