我有一个表结构
表1
ID Hours Qty ProductID
1 2 1 100
1 3 5 200
2 6 6 100
2 2 2 200
如果productid是(1,2,3)那么我需要总和(数量*小时),如果生产(200,300,400,500)那么我需要总和(数量)。
我写了这样的代码
select ID,case when productid in (1,2,3) then
SUM( qty * hrs)
when productid in (100,200,300) then SUM( qty ) end result1
from Prod group by id ,productid
但我不想按照productid分组,我想在“IN子句”中传递它。如何实现它。
答案 0 :(得分:2)
将SUM()
移到CASE WHEN
语句之外。
SELECT
ID,
SUM(case when productid in (1,2,3) then qty * hrs
when productid in (100,200,300) then qty
end) result1
FROM
Prod
GROUP BY
ID
答案 1 :(得分:0)
假设您想要所有列加上查询结果,您可以这样做:
select p.*, aux.result
from Prod p
inner join (select ID,case when productid in (1,2,3) then SUM( qty * hrs)
when productid in (100,200,300) then SUM( qty )
end as result
from Prod group by id ,productid) aux on aux.id = p.id