Ich denke, ich verstehe Ihre Anforderungen hier und wenn ich das tue, sind sie eigentlich ziemlich einfach. Zunächst müssen Sie Ihre Liste der und Code
Kombinationen erhalten, so dass Sie einen endgültigen Ergebnisdatensatz von ihnen erstellen können, join
in Ihre TableA
und TableB
und einige bedingte sum
Berechnungen durchführen.
Bitte beachte, dass ich einige zusätzliche Daten hinzugefügt haben, um die volle Funktionalität meines Ansatzes anzuzeigen:
-- Built test data
declare @a table([Year] int,[Month] int,Code int, Unit int, CA decimal(20,2));
declare @b table([Year] int,[Month] int,CodeP int, Unit_P int, CA_P decimal(20,0));
insert into @a values (2017,1,280,1,298259.42),(2017,1,281,0,0),(2017,2,280,1,298220.99),(2017,2,281,0,0),(2017,3,282,0,0),(2017,3,280,1,298033.09),(2017,4,280,1,298000.00);
insert into @b values (2017,1,280,1,250000),(2017,1,280,3,950000),(2017,3,281,1,250000),(2017,3,282,1,250000),(2017,6,282,1,250000);
-- Derived table to get all combinations of Year and Code across both tables
with y as
(
select [Year]
,Code
from @a
union -- Use of UNION ensures that a unique list is returned.
select [Year]
,CodeP
from @b
)
select y.[Year]
,y.Code
,sum(case when a.[Month] between 1 and 3 then a.Unit else 0 end) as Unit
,sum(case when a.[Month] between 1 and 3 then a.CA else 0 end) as CA
,sum(case when b.[Month] between 1 and 3 then b.Unit_P else 0 end) as Unit_P
,sum(case when b.[Month] between 1 and 3 then b.CA_P else 0 end) as CA_P
,isnull(sum(a.Unit),0) as Unit_PPP
,isnull(sum(a.CA),0) as CA_PPP
from y -- Then join this list onto both tables to get the totals
left join @a a
on(y.[Year] = a.[Year]
and y.Code = a.Code
)
left join @b b
on(y.[Year] = b.[Year]
and y.Code = b.CodeP
)
group by y.[Year]
,y.Code
order by y.[Year]
,y.Code;
Ausgang:
+------+------+------+------------+--------+---------+----------+------------+
| Year | Code | Unit | CA | Unit_P | CA_P | Unit_PPP | CA_PPP |
+------+------+------+------------+--------+---------+----------+------------+
| 2017 | 280 | 6 | 1789027.00 | 16 | 4800000 | 8 | 2385027.00 |
| 2017 | 281 | 0 | 0.00 | 2 | 500000 | 0 | 0.00 |
| 2017 | 282 | 0 | 0.00 | 1 | 250000 | 0 | 0.00 |
+------+------+------+------------+--------+---------+----------+------------+
Ist 'UNION' in diesem Fall nicht funktioniert? Sie können UNION zum Anzeigen verwenden, indem Sie eine zusätzliche Spalte hinzufügen, um den TableName zu unterscheiden. – GauravKP
Ist der Monat derselbe wie Mois? Sie benötigen eine Union all, um alle Zeilen aus beiden Tabellen zu kombinieren. –
Ja mois als Monat –