gpt4 book ai didi

sql - 每个总和带有 WHERE 子句的 SUM 函数?

转载 作者:行者123 更新时间:2023-12-04 08:40:07 24 4
gpt4 key购买 nike

我有两张 table :员工 营业时间 .

工作人员(200 多行):
Staff_ID、姓名、职位
每个工作人员在此表中只出现一次

小时(1000+ 行):
Staff_ID、小时、金额、BillableFlag、办公室、DatePeriod
每个工作人员在这张表中出现多次

我需要一个查询,该查询从 Staff 表中提取位置 = 'Assistant' 的所有员工,并且 hours 表中的 hours 和 Amount 列对每个总和使用不同的逻辑求和两次。
像这样的东西(这是一个带有一些简单英语的查询以帮助解释):

select s.name,
sum(h.hours) as 'Hours_Not_Billable' --[NEED IT TO SUM ONLY HOURS WHERE h.BILLABLEFLAG <> 'Y', h.office = '2', h.period = 'Q3' AND ONLY DO IT FOR EACH STAFF MEMBER],
sum(h.amount) as 'Amount_Not_Billable' --[NEED IT TO SUM ONLY AMOUNT WHERE h.BILLABLEFLAG <> 'Y', h.office = '2', h.period = 'Q3' AND ONLY DO IT FOR EACH STAFF MEMBER],
sum(h.hours) as 'Hours_Billable' --[NEED IT TO SUM ONLY HOURS WHERE h.BILLABLEFLAG = 'Y', h.office = '2', h.period = 'Q3' AND ONLY DO IT FOR EACH STAFF MEMBER],
sum(h.amount) as 'Amount_Billable --[NEED IT TO SUM ONLY HOURS WHERE h.BILLABLEFLAG = 'Y', h.office = '2', h.period = 'Q3' AND ONLY DO IT FOR EACH STAFF MEMBER]'
from Staff S
left join Hours H on S.Staff_ID = H.Staff_ID

where s.position = 'Assistant'
group by s.name
非常感谢帮助!
谢谢

最佳答案

使用条件聚合。这个想法是放一个 case sum() 中的表达式,过滤掉的值被考虑在内。
您的伪代码将转换为:

select 
s.name,
sum(case when h.billableflag <> 'Y' then h.hours else 0 end) hours_not_billable,
sum(case when h.billableflag <> 'Y' then h.amount else 0 end) amount_not_billable,
sum(case when h.billableflag = 'Y' then h.hours else 0 end) hours_billable,
sum(case when h.billableflag = 'Y' then h.amount else 0 end) amount_billable
from staff s
left join hours h
on s.staff_id = h.staff_id and h.office = 2 and h.period = 'Q3'
where s.position = 'Assistant'
group by s.name
注意:大多数条件对所有表达式都是通用的,因此我将它们移至 on left join的条款.

关于sql - 每个总和带有 WHERE 子句的 SUM 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64613609/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com