Group By通过隐藏列 - SQL

时间:2012-03-08 11:11:49

标签: sql sql-server tsql

我有一个表结构

表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子句”中传递它。如何实现它。

2 个答案:

答案 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