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”。我试图在此案中做出第一个陈述,但也没有运气。
答案 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