SQL大小写两者兼而有之

时间:2019-02-07 19:20:58

标签: sql teradata

SQL的新手,请原谅我的基本问题。

我有一个ID和值表。某些值映射到一个项目,而其他值映射到另一个项目。我还想突出显示ID是否同时包含两个项目,但遇到了问题:

SEL 
DISTINCT ID,
CASE 
    WHEN value_id IN (1,2,3,4,5,7,17,18) THEN 'item1' 
    WHEN value_id IN (6,8,9,10,11,12,13,14,15,16) THEN 'item2' 
    WHEN value_id IN (1,2,3,4,5,7,17,18) AND value_id IN (6,8,9,10,11,12,13,14,15,16) THEN 'both' 
    ELSE 0 end AS which_item
FROM table_name
GROUP BY 1, 2

但是应用时不会返回“ both”,示例ID ABCD有2个记录,其值分别为“ item1”和“ item2”,但没有1条记录,且均为“ both”。我试图在此案中做出第一个陈述,但也没有运气。

1 个答案:

答案 0 :(得分:4)

您仅需要GROUP BY上的ID和一些条件逻辑。这是一种方法:

SELECT ID,
       (CASE WHEN SUM(CASE WHEN value_id IN (1, 2, 3, 4, 5, 7, 17, 18) THEN 1 ELSE 0 END) > 0 AND
                  SUM(CASE WHEN value_id IN (6, 8, 9, 10, 11, 12, 13, 14, 15, 16) THEN 1 ELSE 0 END) > 0
             THEN 'both' 
             WHEN SUM(CASE WHEN value_id IN (1, 2, 3, 4, 5, 7, 17, 18) THEN 1 ELSE 0 END) > 0 
             THEN 'item1'
             WHEN SUM(CASE WHEN value_id IN (6, 8, 9, 10, 11, 12, 13, 14, 15, 16) THEN 1 ELSE 0 END)
             THEN 'item2'
             ELSE 'none'
        END) AS which_item
FROM table_name
GROUP BY 1