When I have a table like this
field_one | field_two | field_three |
---|---|---|
A | 1 | 1 |
A | 2 | 2 |
A | null | 3 |
A | null | null |
B | 1 | 1 |
B | null | 4 |
B | null | null |
C | 1 | 1 |
C | null | null |
I'd like to select a new field using this logic. (I wrote it in JS stytle for understanding.):
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
}
}
Expected result:
field_one | field_two | field_three | new_field |
---|---|---|---|
A | 1 | 1 | 1 |
A | 2 | 2 | 2 |
A | null | 3 | 3 |
A | null | null | 100 |
B | 1 | 1 | 1 |
B | null | 4 | 4 |
B | null | null | 200 |
C | 1 | 1 | 1 |
C | null | null | 300 |
Can I do this in a query in BigQuery??
I know COALESCE and CASE but not enough for the above logic.
CodePudding user response:
You may try using this select, assuming you just want to view the column new_field
:
SELECT field_one, field_two, field_three,
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 yourTable
ORDER BY field_one, field_two, field_three;
CodePudding user response:
Try this one:
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
CodePudding user response:
In SQL, IF
is usually represented as CASE
. Use a simple nested CASE
for your problem
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;