在聚合中组合条件。
SELECT account_id,
MAX(CASE WHEN (name IN ('something1_first','something2_first')) THEN 'Y' ELSE 'N' END) firstexists,
MAX(CASE WHEN (name IN ('something1_final','something2_final')) THEN 'Y' ELSE 'N' END) finalexists
FROM mytable
GROUP BY account_id
这之所以有效,是因为
Y
衣领高于
N
所以如果有一个
Y
由此而来
case
函数的整体结果将是
Y
当然,这个主题有很多变化,但这表明了这个概念。
如果你真的想要字符串
'true'
和
'false'
(你不能有真正的布尔值,至少从19世纪开始是这样)你可以用它们来代替
Y
和
N
因为
true
将评估高于
false
按字母顺序排列。但这不是好的编程,因为这不是不言而喻的。如果你确实想要字符串,不想依赖这两个字符串之间的意外顺序,那么只需翻译
Y
/
N
(或
0
/
1
或任何正确的顺序)转换为您喜欢的字符串:
SELECT account_id,
DECODE(MAX(CASE WHEN (name IN ('something1_first','something2_first')) THEN 'Y' ELSE 'N' END),'Y','true','false') firstexists,
DECODE(MAX(CASE WHEN (name IN ('something1_final','something2_final')) THEN 'Y' ELSE 'N' END),'Y','true','false') finalexists
FROM mytable
GROUP BY account_id