为每列分隔WHERE IN条件

时间:2016-07-04 09:15:09

标签: sql sql-server subquery conditional-statements

我的product表格如下:

id_product   |   product_count  |  product_name  
1            |   10             |  name1
2            |   20             |  name2
3            |   20             |  name3
4            |   52             |  name4
5            |   30             |  name5
6            |   50             |  name6

我想做一个查询,结果将是:

 product_group_name   |   product_group_name | product_group_name |...more groups
 30(sum)              |   72(sum)            | 50(sum)            |...more values

其中group为id_product,如(1,2 OR 3,4 OR 1,4,5),组名将为别名。

这是用于创建单个列的sql代码:

SELECT 
    cast(SUM(product.product_count) as float) as group_name
FROM    
    product
WHERE 
    product.id_product in (608,913,528,529,920,406,407,408,912,919,918,917,924,926,925)

此查询的结果是:

| group_name |
| 200        |

是否可以添加更多具有组名的列?对他们来说重要的是列,而不是行。

2 个答案:

答案 0 :(得分:1)

我认为PIVOT可能是你正在寻找的东西。也请检查question

答案 1 :(得分:0)

如果我理解正确,一种方法是通过条件聚合:

SELECT 
    cast(SUM(
        CASE WHEN product.id_product in (608,913,528, ... ,924,926,925)
        THEN product.product_count ELSE NULL END) as float) as group_name1
    ,cast(SUM(
        CASE WHEN product.id_product in (1,2,3)
        THEN product.product_count ELSE NULL END) as float) as group_name2
    ,cast(SUM(
        CASE WHEN product.id_product in (4,5)
        THEN product.product_count ELSE NULL END) as float) as group_name3
FROM
    product
;