我想在一列中识别那些存在于数据中的人,但是只有10个巢穴是有限的。对我来说,有什么更简单的方法来获得我想要的结果吗?

我希望你能帮我。
发布于 2019-01-17 08:37:28
您可以使用一个CASE表达式来实现这一点:
select a,b,c,d,
case (a + b * 2 + c * 4 + d * 8)
when 0 then 'none'
when 1 then 'a'
when 2 then 'b'
when 4 then 'c'
when 8 then 'd'
when 3 then 'a-b'
when 7 then 'a-b-c'
when 5 then 'a-c'
when 9 then 'a-d'
when 6 then 'b-c'
when 10 then 'b-d'
when 14 then 'b-c-d'
when 12 then 'c-d'
when 15 then 'a-b-c-d'
else 'error'
end as present
from the_table;这将为每个列创建一个具有一个位的“位集”,然后测试唯一标识每个组合的值。
这假设这些列中没有NULL值。
db<>fiddle上的在线示例
另一种选择可能是将表达式连接起来:
select concat(case when a = 1 then 'a-' end,
case when b = 1 then 'b-' end,
case when c = 1 then 'c-' end,
case when d = 1 then 'd-' end)
from the_table;这在最后留下了一个丑陋的悬空-,但是您可能可以使用substring()和/或replace()调用的组合来删除它。
https://dba.stackexchange.com/questions/227343
复制相似问题