CASE WHEN 错误 - 根据另一列的条件为列设置值

问题描述

我正在尝试编写一个 case when 语句,当连接 =“Snapchat”时将国家/地区名称设置为“美国”。但我不断收到以下错误

操作符 CASE 没有匹配的签名;所有 THEN/ELSE 参数都必须强制转换为通用类型,但发现:BOOL,STRING;实际参数类型 (WHEN THEN) ELSE: (BOOL BOOL) STRING at [4:5]

SELECT 
    date,app_name,case when lower(connection) like '%snapchat%' then country_name = 'United States' else country_name end as country,connection,platform,ad_type,cast(Ad_Requests as FLOAT64) as ad_requests,cast(Ad_Impressions as FLOAT64) as ad_impressions,cast(Ad_Revenue____ as FLOAT64) as ad_revenue
FROM `dataset`

有什么想法可以改进我的查询吗?提前致谢。

解决方法

你想要的样子:

SELECT . . . 
       (case when lower(connection) like '%snapchat%'
             then 'United States' 
             else country_name
        end) as country,

您的公式具有 then 子句的布尔结果。那会导致错误。但另外,它引用了可能不存在的列 country

,

您可以在下面使用

SELECT 
    . . . 
    IF(lower(connection) like '%snapchat%','United States',country_name) as country,. . .
FROM `dataset`