【发布时间】:2013-05-04 22:09:15
【问题描述】:
我有 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 的数据的第一行中,我有 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 个选择语句和另一个选择语句来汇总和分组 3 个分配视图的结果。我可以在一个简单的视图中实现这一点吗?
【问题讨论】:
-
如果您将 LONDON 的所有
Ratio添加到 1.01,则不应如此。 -
哪个 SQL Server 版本? 2005 年以上?
-
字段比率用于分配数据,与百分比没有任何关系。例如。当“研究实验室”的分配数据(总比率为 0.40)时,62.5% 到马德里,37.5% 到伦敦
-
SQL server版本为2008 R2