sql - 通过隐藏列进行分组 - SQL

标签 sql sql-server t-sql

我有一个表结构

表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)那么我需要sum(数量*小时),如果productid在(200,300,400,500)那么我需要sum(qty)。

我写了这样的代码

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

最佳答案

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

关于sql - 通过隐藏列进行分组 - SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9616732/

相关文章:

sql-server - 使用完整缓存时,查找组件无法匹配空字符串

sql - 如何使用左外连接和 tableB 的 where 条件从 tableA 中获取所有记录?

mysql - 如何查询 1 个包含 6 列的表,其中 3 列有条件

c# - Entity Framework 创建了一个我不想要的表

sql - 将 "Arnold Schwarzenegger"和 "Hasta la vista baby"插入到这两个空 SQL 表中,我的 SQL 语句是什么?

sql - 如何获取此类数据?

php - 如何更改默认错误消息代码

sql - 带有字符串文字的 Postgresql COALESCE 不能按预期工作

sql - 如何将 1 行的 3 个值应用到每个值的 3 行?

sql-server - XPath 查询 : parsing multiple paths using the same query (Cross Apply/. 节点() )