sql - 如何在 BigQuery SQL 中混合使用 IF 和 CASE
问题描述
当我有这样一张桌子时
field_one | field_two | field_three |
---|---|---|
一个 | 1 | 1 |
一个 | 2 | 2 |
一个 | 无效的 | 3 |
一个 | 无效的 | 无效的 |
乙 | 1 | 1 |
乙 | 无效的 | 4 |
乙 | 无效的 | 无效的 |
C | 1 | 1 |
C | 无效的 | 无效的 |
我想使用此逻辑选择一个新字段。(为了便于理解,我用 JS 风格写了它。):
new_field = field_two
if ( field_two == null ) {
new_field = field_three
}
if ( field_three == null ) {
switch ( field_one ) {
case 'A':
new_field = 100
case 'B':
new_field = 200
case 'C':
new_field = 300
}
}
预期结果:
field_one | field_two | field_three | 新字段 |
---|---|---|---|
一个 | 1 | 1 | 1 |
一个 | 2 | 2 | 2 |
一个 | 无效的 | 3 | 3 |
一个 | 无效的 | 无效的 | 100 |
乙 | 1 | 1 | 1 |
乙 | 无效的 | 4 | 4 |
乙 | 无效的 | 无效的 | 200 |
C | 1 | 1 | 1 |
C | 无效的 | 无效的 | 300 |
我可以在 BigQuery 的查询中执行此操作吗?
我知道 COALESCE 和 CASE 但对于上述逻辑还不够。
解决方案
您可以尝试使用此选择,假设您只想查看该列new_field
:
SELECT field_one, field_two, field_three,
COALESCE(field_two,
field_three,
CASE field_one WHEN 'A' THEN 100
WHEN 'B' THEN 200
WHEN 'C' THEN 300 END)) AS new_field
FROM yourTable
ORDER BY field_one, field_two, field_three;
推荐阅读
- javascript - 在 Reactjs 中编写类组件方法时出现语法错误
- android - 如何在 nativescript 中实现父母门
- reactjs - React.js material-ui:用逗号屏蔽时是否可以对数量进行排序?
- javascript - Chrome 扩展 - 在 background.js 中需要什么
- ruby-on-rails - RSpec 404 测试响应状态为 200
- javascript - 根据多个属性过滤 N 级嵌套对象数组
- c++ - QMessage::question(),对话框应该是模态的,但有时不是,对话框显示在主窗口下
- node.js - 打字稿,路径别名与我的项目根目录之外的文件夹
- javascript - 在 Javasript 中打开或关闭多个灯
- zsh - zsh:我需要关闭文件描述符吗?