Are these two statements equivalent in snowflake?
Case 1:
CASE
when VAL='ABC' then 'ALPHA'
when VAL='123' then 'NUMERIC'
else 'ALPHANUMERIC'
end;
Case 2:
VOBJECTDESCRIPTION =
CASE WHEN VAL='ABC' THEN 'ALPHA' ELSE
CASE WHEN VAL='123' THEN 'ALPHA' ELSE
'ALPHANUMERIC'
END END;
Well, you've got several typos which make these both different, but given the gist of what you're trying to ask: statements like these both have the same behavior.
WITH X as (
select VAL from (values ('1'), ('2'), ('ABC')) as x(VAL)
)
SELECT CASE
when VAL='ABC' then 'ALPHA'
when VAL='123' then 'NUMERIC'
else 'ALPHANUMERIC'
end
FROM X;
WITH X as (
select VAL from (values ('1'), ('2'), ('ABC')) as x(VAL)
)
SELECT
CASE WHEN VAL='ABC' THEN 'ALPHA'
ELSE
CASE WHEN VAL='123' THEN 'NUMERIC'
ELSE 'ALPHANUMERIC'
END
END
FROM X;
From the parser's perspective, the first option thinks of all the WHEN
s as siblings, whereas the second one treats the entire second CASE
statement as a child of the first ELSE
. But I doubt there'd be any measurable difference in performance.
The first syntax is simpler, and I would favor it for readability. Even better, you can do this to avoid duplicative VAL=
syntax:
WITH X as (
select VAL from (values ('1'), ('2'), ('ABC')) as x(VAL)
)
SELECT CASE VAL
when 'ABC' then 'ALPHA'
when '123' then 'NUMERIC'
else 'ALPHANUMERIC'
end
FROM X;