首页 > 解决方案 > 如何在 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 但对于上述逻辑还不够。

标签: sqlgoogle-bigquery

解决方案


您可以尝试使用此选择,假设您只想查看该列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;

推荐阅读