如何在BigQuery中将指定列转为两行并填充指定默认值
解决方案
你可以通过UNNEST函数结合条件生成的数组来实现需求:当qst_no为'100'时生成包含'Y'和'N'的数组,其他情况生成仅包含qst_no值的单元素数组,再通过UNNEST展开数组得到多行结果。
实现SQL语句
SELECT qst_no, UNNEST( CASE WHEN qst_no = '100' THEN ['Y', 'N'] ELSE [qst_no] END ) AS qst_val FROM db.QUESTIONS;
逻辑说明
- 当
qst_no等于'100'时,CASE返回包含两个元素的数组,UNNEST会将数组拆分为两行,分别对应'Y'和'N'。 - 对于其他
qst_no值,CASE返回仅包含qst_no值的单元素数组,UNNEST展开后仍为一行,保持与原qst_no一致的qst_val。
结果验证
假设原表数据为:
| qst_no | qst_val |
|---|---|
| 100 | xxx |
| 101 | yyy |
| 102 | zzz |
执行上述SQL后,会得到你期望的结果:
| qst_no | qst_val |
|---|---|
| 100 | Y |
| 100 | N |
| 101 | 101 |
| 102 | 102 |
如果实际需求是其他情况保留原qst_val字段值(而非与qst_no一致),只需将ELSE [qst_no]改为ELSE [qst_val]即可。
内容的提问来源于stack exchange,提问作者sai
相关产品推荐
相关产品推荐

