首页 > 解决方案 > 我可以在 CASE WHEN THEN 子句下使用 'OR' 语句吗?

问题描述

我在雪花上有一张my_table表:

公司 交易
美国人 321-美国鹰 123
耐克 080* 耐克_74093
美国人 00 美洲鹰_42
阿迪达斯 0101阿迪达斯**093
美国人 987 美国航空公司_4
美国人 17 美国运通 02
美国人 09 美国-EAGLE_42
美国人 0* 美国航空公司 **7
美国人 101美国运通*9
可口可乐 98*可口可乐__4237

COMPANY 栏是公司的简称(基本上是公司名称的第一个字)。

TRANSACTIONS 列是我的数据集中显示的交易名称。由于处理方式不同,每个交易名称中都会有一些前缀和后缀。

对于Company列值“American”, Transactions列中可能对应有“American Eagle”、“American Airline”、“American Express”等。

如果我只想保留来自American Eagle交易的行,而 Company 列的值为“ American ”与所有其他公司的交易,我该怎么办?

我正在寻找的结果表:

公司 交易
美国人 321-美国鹰 123
耐克 080* 耐克_74093
美国人 00 美洲鹰_42
阿迪达斯 0101阿迪达斯**093
美国人 09 美国-EAGLE_42
可口可乐 98*可口可乐__4237

下面是我试图解决问题的 SQL 查询,我在这里遇到的挑战甚至是 American Eagle,Transactions 列的值可能类似于"AMERICAN EAGLE"(中间有空格) 、"AMERICANEAGLE"(没有空格)"AMERICAN -EAGLE"(中间的连字符)等。因此,我尝试在我的 SQL 查询中使用 CASE WHEN ... THEN (...OR...) 语句。但是,以下查询不起作用并弹出错误。

    SELECT * 
    FROM my_table
    WHERE 
     transactions LIKE CONCAT('%',
     CASE WHEN company = 'AMERICAN' THEN ('AMERICAN EAGLE' OR 'AMERICANEAGLE' OR 'AMERICAN-EAGLE')
     ELSE company END, '%')

我可以在“THEN”子句下使用“OR”语句,因为 CASE WHEN THEN 只返回一个值吗?

标签: snowflake-sql

解决方案


我会以正常的 OR 条件分别处理“AMERICAN”公司,包括您拥有的三个案例,然后是所有其他公司:

    with my_table as (
    select 'AMERICAN' as COMPANY,   '321-AMERICAN EAGLE 123' as TRANSACTIONS
    union all select 'NIKE',    '080* NIKE_74093'
    union all select 'AMERICAN',    '00 AMERICANEAGLE_42'
    union all select 'ADIDAS',  '0101ADIDAS **093'
    union all select 'AMERICAN',    '987 AMERICAN AIRLINE_4'
    union all select 'AMERICAN',    '17 AMERICAN-EXPRESS 02'
    union all select 'AMERICAN',    '09 AMERICAN-EAGLE_42'
    union all select 'AMERICAN',    '0* AMERICANAIRLINE **7'
    union all select 'AMERICAN',    '101AMERICAN EXPRESS *9'
    union all select 'COCA',    '98*COCA COLA __4237'
    )
    select *
    from my_table
    where (  ( company = 'AMERICAN' and (transactions like '%AMERICAN EAGLE%'
                                      or transactions like '%AMERICANEAGLE%'
                                      or transactions like '%AMERICAN-EAGLE%')
             )
          OR company <> 'AMERICAN'
          );

推荐阅读