私は2つのテーブルを持っています。私が持っているオフィスのリストと、オフィスに分配する収入のリストです。
create table #Income(City varchar(50),Office varchar(50),YearsBudget money)
insert #Income
select 'London', null, 5000 UNION
select 'Paris', null, 6000 UNION
select null, 'Sales', 7000 UNION
select 'London','Support',10000
create table #Offices(City varchar(50),Office varchar(50),Ratio float)
insert #Offices
select 'London','Research Lab' ,.15 UNION
select 'London','Customer Services',.45 UNION
select 'London','Sales' ,.05 UNION
select 'London','Admin' ,.19 UNION
select 'London','Support' ,.17 UNION
select 'Paris' ,'Sales' ,.15 UNION
select 'Paris' ,'Admin' ,.45 UNION
select 'Paris' ,'Support' ,.05 UNION
select 'Madrid','Sales' ,.45 UNION
select 'Madrid','Research Lab' ,.25
たとえば、#Income のデータの 1 行には、既知のすべてのロンドン オフィスに配分する必要がある 5000 ポンドがあり、別の行には、既知のすべてのパリ オフィスに配分する必要がある 6000 ポンドがあります。
これは、次の SQL で実現できます。
select o.City,o.Office, convert(money,i.YearsBudget/DATA.RSum*o.Ratio) as ThisYearsBudget
from #Income as i
Left Join #Offices as O
on i.City=o.City
Left join (select child.City,SUM(child.Ratio) as RSum from #Offices as child group by child.City ) DATA
ON i.city=DATA.City
where i.Office is null
すべての営業所に £7000 を配分し、ロンドン サポート オフィスに £10000 を配分するには、さらに 2 つの select ステートメントと、3 つの配分ビューの結果を合計してグループ化するためのさらに別の select ステートメントが必要です。1 つの単純なビューでこれを達成できますか?