【发布时间】:2020-01-18 21:08:25
【问题描述】:
我是 Bigquery 和 SQL 的绝对初学者,如果这是一个愚蠢的问题,我深表歉意。我有一个这样的 bigquery 表
|Name|Value1|Value2|Value3|Value4|Value5|Value6|
|Ben |19 |45 |null |19 |13 |null |
|Bob |34 |null |12 |null |45 |43 |
我的查询仅选择与名称列中的名称匹配的一行。我希望结果只显示具有非空值的列。例如,如果我这样做
SELECT * FROM mytable WHERE Name = "Bob"
我希望结果看起来像
|Name|Value1|Value3|Value5|Value6|
|Bob |34 |12 |45 |43 |
同样,如果我选择 Ben,我希望结果看起来像
|Name|Value1|Value2|Value4|Value5|
|Ben |19 |45 |19 |13 |
我尝试过SELECT IF,但似乎语法不正确。
【问题讨论】:
-
你不能在标准 SQL 中这样做,因为 SQL 查询必须返回一个 fixed 列列表(数据库需要知道查询将由哪些列返回查询在执行之前)。
-
虽然这无法完成——你很可能甚至不需要这样做——所以为了帮助你——解释为什么你认为你需要这样的输出?真正的用例是什么?当然,它可以轻松实现,但不同
-
如果同时选择 Ben 和 Bob 会怎样?
-
引用自问题 - “我的查询仅选择 一行 与名称列中的 [给定] 名称匹配”
-
那么可能有3个选择。第一个选择值到一个数组中,第二个选择 UNNEST(array from first select)。第三个重新展平结果并使用 where not null。
标签: sql google-bigquery