【问题标题】:SQL - Search multiple values across multiple columns to create a flagSQL - 在多个列中搜索多个值以创建标志
【发布时间】:2020-06-27 22:55:25
【问题描述】:

我正在尝试跨多个列搜索多个值,以便创建包含条件标志,但无法找出最佳方法。我需要创建一个标志,所以我试图不必使用where 语句

我的代码中现在只有一个值,它可以工作:

when 'a' in (col1, col2, col3, col4) 
then 1 
else 0 
end as col_a

想做类似的事情,但想不通:

when 'a', 'b', 'c' in (col1, col2, col3, col4) 
then 1 
else 0 
end as col_all

感谢任何帮助! 谢谢!

【问题讨论】:

    标签: sql presto


    【解决方案1】:

    这是你想要的吗?

    (case when 'a' in (col1, col2, col3, col4) and
               'b' in (col1, col2, col3, col4) and
               'c' in (col1, col2, col3, col4) 
          then 1 else 0
     end) as col_all
    

    有点不清楚您是希望 all 匹配还是 any 匹配。如果是后者,请使用or 而不是and

    【讨论】:

    • 我尝试过类似的方法,我有接近 100 个值来搜索 20 多列,所以希望不必让它太长。可能是唯一的方法
    • @sem 你不能做你想做的事。 case 表达式/语句一次评估一个条件,这就是为什么它是 case...when
    【解决方案2】:

    试试这个

    case array_except(array['a','b','c'],array[col1,col2,col3,col4]) 
    when array[] 
    then 1 
    else 0 
    end as col_all 
    

    【讨论】:

    • 谢谢 - 运行,但不幸的是它没有正确标记任何值(即上面的 a、b、c)
    • 在 Athena 上成功测试(技术上和逻辑上)。用一个简单的例子进行测试,看看出了什么问题。
    • @sem - 请参阅答案中的附图
    • @django-unchained - OP 请求实际上是可行的 :-)
    • 我可以做一个简单的例子,它会起作用,但仍在尝试我真正需要的东西。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    相关资源
    最近更新 更多