多个组中值相同的情况

Case When Same Values In Multiple Groups

我想创建 3 个以上的人组,但我的问题是有些项目属于多个组(有多个子组)。当使用 case when 语句时,我无法重现这些结果,因为它第一次看到该结果时它被计算在内,然后在下一个 when 语句中被忽略。

Select Column1, Column2, 
CASE
    WHEN(number IN (1,2,3,4,5,6,7,8)) then 'Group1' 
    WHEN(number IN (1,2,3,4)) then 'Group2' 
    WHEN(number IN (9,10,11,12)) then 'Group3' 
    ELSE 'Group4' END 
AS Categories,
SUM(Gross_Sales)

第 1 组将拥有我想要的一切,第 2 组是空的(正如使用 case 时预期的那样),然后第 3 组将拥有我想要的一切。我将如何重写这个?

假设我的 table 包含以下数据:

|     Number          |     Gross_Sales  |
|---------------------|------------------|
|          1          |         10       |
|---------------------|------------------|
|          2          |         10       |
|---------------------|------------------|
|          8          |         10       |
|---------------------|------------------|

我希望输出显示为:

第 1 组:30
第 2 组:20
第 3 组:0

目前这个returns:

第 1 组:30
第 2 组:0
第 3 组:0

你可以试试这个 -

Select Field1, Field2, 
CASE
    WHEN(number IN (1,2,3,4)) then 'Group1 & Group 2' 
    WHEN(number IN (5,6,7,8)) then 'Group1' 
    WHEN(number IN (9,10,11,12)) then 'Group3' 
    ELSE 'Group4' END 
AS Categories

我认为 UNION 将是解决这个问题的最佳方法:

Select Column1, Column2, 
CASE WHEN(number IN (1,2,3,4,5,6,7,8)) then 'Group1' as categories    
FROM ...

UNION ALL

Select Column1, Column2, 
CASE WHEN(number IN (1,2,3,4)) then 'Group2' as categories    
FROM ...

UNION ALL

Select Column1, Column2, 
CASE WHEN(number IN (9,10,11,12)) then 'Group3' as categories    
FROM ...

UNION ALL

Select Column1, Column2, 
CASE WHEN(number NOT BETWEEN 1 AND 12) then 'Group4' as categories    
FROM ...

您可能希望在子查询中 运行 这个逻辑,然后加入结果,而不是在联合中一遍又一遍地做你的大喇叭 sql。

我不确定你的结果集是否必须成行,但如果你可以在一行中处理结果,你可以这样做:

SELECT 
    SUM(CASE WHEN Number BETWEEN 1 AND 8 THEN Gross_Sales ELSE 0) AS Group1,
    SUM(CASE WHEN Number BETWEEN 1 AND 4 THEN Gross_Sales ELSE 0) AS Group2,
    SUM(CASE WHEN Number BETWEEN 9 AND 12 THEN Gross_Sales ELSE 0) AS Group3,
    SUM(CASE WHEN Number NOT BETWEEN 1 AND 12 THEN Gross_Sales ELSE 0) AS Group4
FROM MyTable

如果您需要像示例输出中那样以行的形式返回,您可以使用数据透视函数或常见的 table 表达式 + 联合。