sql - BigQuery:如果存在则选择列,否则将其设为 NULL?
问题描述
我正在更新每日仪表板。假设每天我有两张桌子TODAY
和BEFORE_TODAY
. 我每天都在做的事情是这样的:
SELECT a, b FROM TODAY
UNION ALL
SELECT a,b FROM BEFORE_TODAY;
TODAY
表每天生成并附加到它之前的所有数据中。现在,我需要生成一个新列c
,为了将这两者联合起来,我也需要它可用BEFORE_TODAY
。
如何添加条件语句来BEFORE_TODAY
检查我是否有c
列并使用该列,否则使用NULL
它来代替它。
解决方案
您的数据模型有问题。您应该将数据放入同一张表的不同分区中。那么你就没有问题了。你可以只查询你想要的分区的主表。该列将出现在历史记录中,并带有一个NULL
值。
这是正确的解决方案。假设您的表有一个主键,您可以创建一个被黑的解决方案。例如,如果a, b
每一行都是唯一的,你可以这样做:
select t.a, t.b, t.c
from today t
union all
select b.a, b.b,
(select c -- not qualified on purpose
from before_today b2
where b2.a = b.a and b2.b = b.b
) as
from before_today b cross join
(select null as c) c;
如果b.c
不存在,则子查询返回c.c
。如果它确实存在,它将b2.c
从子查询返回。
推荐阅读
- c# - 打开文件对话过滤器未按预期工作
- javascript - 单击时显示和隐藏具有匹配类名称的 Div
- openstreetmap - 如何在 OSM(使用立交桥)中获得全国的公共交通站点?
- python - 在循环中对多个数据帧在 python 中运行回归
- sql - 创建从两列创建一列的查询
- node.js - 格式错误的响应:从 dialogflow Web 挂钩获取响应时出现 Webhook 错误
- azure-devops - 如何将迭代字段自动设置为最新迭代?
- node.js - 将文件发送到 Microsoft Teams 中的机器人
- php - 使用单项数组将 PHP 对象转换为 JSON 格式问题
- internet-explorer - 使用 vbscript 在 IE 上更新 regedit AutoConfigURL 变量