Torna al Thread

USE tempdb; GO CREATE TABLE dbo.QTA ( Data_ad smalldatetime NULL --> non metterei null, dovrebbe essere sempre valorizzato e small, non ti serve il secondo preciso no? , Codice int NULL --> non metterei null, dovrebbe essere sempre valorizzato , Qta int NULL --> non metterei null, meglio un default a 0 ) GO INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090110', 1, 5) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090111', 2, 2) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090116', 3, 6) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090120', 2, 8) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090301', 5, 9) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090302', 5, 6) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090405', 1, 4) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20090406', 1, 7) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20080101', 1, 5) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20080105', 5, 8) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20060205', 3, 9) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20080906', 2, 6) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20080902', 1, 6) INSERT INTO [dbo].[QTA] (Data_ad,Codice,Qta) VALUES('20081112', 2, 6) CREATE TABLE dbo.Mesi ( Mese int NULL --> non metterei NULL, dovrebbe essere sempre valorizzato , Anno int NULL --> non metterei NULL, dovrebbe essere sempre valorizzato ) GO -- qui metto tutti i mesi del 2008,2009 e 2006. INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,1) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,2) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,3) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,4) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,5) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,6) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,7) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,8) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,9) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,10) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,11) INSERT INTO dbo.Mesi (anno, mese) VALUES (2008,12) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,1) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,2) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,3) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,4) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,5) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,6) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,7) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,8) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,9) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,10) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,11) INSERT INTO dbo.Mesi (anno, mese) VALUES (2009,12) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,1) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,2) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,3) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,4) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,5) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,6) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,7) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,8) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,9) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,10) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,11) INSERT INTO dbo.Mesi (anno, mese) VALUES (2006,12) GO -- cerca di indentare il codice in modo che sia leggibile ;-) SELECT M.Anno , M.Mese , Quantita = ISNULL(SUM(Q.QTA), 0) FROM dbo.Mesi M LEFT JOIN dbo.Qta Q ON YEAR(Q.data_ad) = M.Anno AND MONTH(Q.data_ad) = M.MESE GROUP BY M.Anno , M.Mese ORDER BY M.Anno , M.Mese -- pulizia DROP TABLE dbo.Qta DROP TABLE dbo.Mesi GO
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5