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