I have an SQLite table called table
. It has 4 columns: col_1, col_2, col_3, col_4
.
If I was to use MySQL as a way of explaining what I want to do, it is something like this:
SELECT CASE WHEN col_4 IS NOT NULL THEN col_4, WHEN col_3 IS NOT NULL THEN (CONCAT COL_3 and COL_2) ELSE (CONCAT STRING + col_2) END AS clue FROM TABLE
Essentially, what I want to do is say, pick the value of col_4
if there is a value there. If there is nothing, then check if there is a value in col_3
. If there is, then concatenate the values of col_3
and col_2
. If this is also null, then concatenate a string with the value of col_2
(which will never be null, as per how I’ve designed it.
To try and get this, I wrote the following SQLite query:
select CASE col_4 WHEN NOT NULL col_4 ELSE CASE col_3 WHEN NOT NULL col_3 || ' - ' || col_2 ELSE'String: ' || col_2 END AS clue FROM table
But when running it in an SQLite view online, it fails at the very first case statement.
It doesn’t let me do CASE col_4 WHEN NOT NULL col_4
, i.e return a value from a column within in my statement. It’s making me write a specific string, which is not what I want.
Is there a way around this that I am missing?
Advertisement
Answer
The syntax you use for CASE
is wrong.
Change it to this:
SELECT CASE WHEN COL_4 IS NOT NULL THEN col_4, WHEN COL_3 IS NOT NULL THEN COL_3 || '-' || COL_2 ELSE 'String: ' || COL_2 END AS clue FROM TABLE
Keep in mind that the the result of the concatenation of 2 values is NULL
if any of the 2 values is NULL
.
So if COL_2
is NULL
the result of the last 2 branches of the CASE
expression will also be NULL
.
If COL_2
can’t be NULL
then the code can be simplified to this:
SELECT COALESCE(COL_4, COL_3 || '-' || COL_2, 'String: ' || COL_2) FROM TABLE