我有一个类似下面的列表,我希望从该列表中汇总给定公司的“金额”列中的总和。问题的关键是我想包括公司员工的家庭成员。这些关系由ID保留在右侧,并以第12个字符不同(如果所讨论的家庭只有一名成员,则第12个字符为空格)。
我的问题是,为ABC Inc的所有员工(包括家庭成员)获取金额的最有效方法是什么?我相信这将首先需要对ABC Inc的所有员工进行查询,然后再使用查询一的结果列表来查询其家庭成员。
这是最有效的方法吗?我的表非常大(超过10GB的平面数据),并且将需要成千上万个这样的查询,因此效率非常重要。
到目前为止,我用于获取没有家人的数据的代码是:
select ID, Name, Company_Name, sum(Amount) from indivs
where Orgname ='APC Inc' --or Employer like '%APC Inc%'
group by ID, Name, Company_Name
但是,这只给了我直接雇员的钱。
下一步要增加家庭成员的金额吗?
答案 0 :(得分:0)
我想你想要
select sum(amount)
from t
where exists (select 1
from t t2
where t2.company = 'APC Inc.' and
left(t2.id, 11) = left(t.id, 11)
);
为了提高性能,您可以创建一个计算列和索引:
alter table t add id11 as (left(id, 11)) persisted;
create index idx_company_id11 on t(company, id11);
然后将查询短语设置为:
select sum(amount)
from t
where exists (select 1
from t t2
where t2.company = 'APC Inc.' and
t2.id11 = t.id11
);