當我有一張這樣的桌子時
| field_one | 欄位二 | 欄位三 |
|---|---|---|
| 一種 | 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 | 欄位二 | 欄位三 | 新欄位 |
|---|---|---|---|
| 一種 | 1 | 1 | 1 |
| 一種 | 2 | 2 | 2 |
| 一種 | 空值 | 3 | 3 |
| 一種 | 空值 | 空值 | 100 |
| 乙 | 1 | 1 | 1 |
| 乙 | 空值 | 4 | 4 |
| 乙 | 空值 | 空值 | 200 |
| C | 1 | 1 | 1 |
| C | 空值 | 空值 | 300 |
我可以在 BigQuery 的查詢中執行此操作嗎?
我知道 COALESCE 和 CASE 但對于上述邏輯還不夠。
uj5u.com熱心網友回復:
您可以嘗試使用此選擇,假設您只想查看列new_field:
SELECT field_one, field_two, field_three,
COALESCE(field_two, COALESCE(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;
uj5u.com熱心網友回復:
試試這個:
select
*,
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 my_table
uj5u.com熱心網友回復:
在 SQL 中,IF通常表示為CASE. CASE為您的問題使用簡單的嵌套
Select field_one, field_two, field_three,
Case when field_two is NULL
THEN field_three
When field_three is NULL
THEN
CASE WHEN FIELD_ONE ='A'
Then 100
WHEN FIELD_ONE ='B'
Then 200
WHEN FIELD_ONE ='C'
Then 300
END
END
AS
new_field FROM TABLE;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/353895.html
標籤:sql 谷歌-bigquery
上一篇:具有間接關系的SQL連接條目
