sql - CASE WHEN 多个部分匹配 BigQuery
问题描述
我正在尝试根据另一列中的部分匹配值在我的 BigQuery 表中创建一个新列。这是我正在尝试做的一个例子。假设这是我的桌子:
ID | 陈述 |
---|---|
123 | 我喜欢绿色 |
234 | 我爱绿色 |
456 | 我喜欢橙色 |
123 | 我讨厌黄色 |
我想要做的是创建一个如下所示的新表:
ID | 陈述 | 颜色 |
---|---|---|
123 | 我喜欢绿色 | 绿色 |
234 | 我爱绿色 | 绿色 |
456 | 我喜欢橙色 | 橙 |
123 | 我讨厌黄色 | 没有任何 |
我试过使用这样的查询:
SELECT ID, Statement
CASE WHEN Statement IN ('green') THEN 'green' ELSE 'None' END AS color
CASE WHEN Statement IN ('orange') THEN 'orange' ELSE 'None' END AS color
FROM `data.Table1`
但这当然只有在完全匹配的情况下才有效。如何获得具有基于上述部分匹配的值的新列?提前致谢。
解决方案
你很接近:
SELECT ID, Statement,
(CASE WHEN Statement LIKE '%green%' THEN 'green'
WHEN Statement LIKE '%orange%' THEN 'orange'
ELSE 'None'
END) as color
FROM `data.Table1`;
注意:这将返回匹配的第一个颜色,这与您表达问题的方式一致。
推荐阅读
- sql - 键和值的 SQL 查询
- java - 根据条件将字符串转换为字符串
- qt - 未显示 Combobox 的完成符
- mongodb - 如何在 go(lang) 中连接到 mlab mongodb 数据库?
- c# - C# JsonConvert - 如何解析不规则的键/值 JSON?
- swift - 如何在 Swift Playgrounds 中获得弹出对话框
- php - 如何合并jpeg图像
- javascript - 每次在 JavaScript 中调用函数时分别保存函数的结果
- html - 下拉菜单 css BEM 概念的 Html 标记
- powershell - PS Invoke-RestMethod:远程服务器返回错误:(500)内部服务器错误