[英]BigQuery: Select column if it exists, else put NULL?
我正在更新每日儀表板。 假設我每天都有兩個表TODAY
和BEFORE_TODAY
。 我每天都在做的事情是這樣的:
SELECT a, b FROM TODAY
UNION ALL
SELECT a,b FROM BEFORE_TODAY;
TODAY
表每天生成並附加到它之前的所有數據。 現在,我需要生成一個新列,比如c
並且為了 UNION ALL 這兩個,我需要它在BEFORE_TODAY
也可用。
如何向BEFORE_TODAY
添加條件語句以檢查我是否有c
列並使用該列,否則使用NULL
代替它。
您的數據 model 有問題。您應該將數據放入同一個表的不同分區中。 那么你就沒有問題了。 您可以只查詢主表以獲得所需的分區。 該列將出現在歷史記錄中,其值為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
。
雖然通過結合動態 SQL 和 INFORMATION_SCHEMA,您可以編寫一個腳本來實現您所說的,但這似乎不是正確的做法。
作為數據 model 規划的一部分,您應該提前將列 c 添加到BEFORE_TODAY
。 現有行上新添加的列將始終具有 NULL 值。 然后您可以將列添加到TODAY
並照常引用列 c。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.