Reputation: 721
I want to do the following.
If COLUMN_A <> COLUMN_B then print COLUMN_A,COLUMN_B,and another dummy column status as not ok. I tried the following.
SELECT CASE WHEN COLUMN_A <> COLUMN_B
THEN SELECT COLUMN_A, COLUMN_B,status as 'NOT OK'--(im not sure what to do here)
END
FROM TABLE_1
Hi I'm sorry i couldn't express the question properly.
Here is what I'm expecting.
ROW COLUMN_A COLUMN_B STATUS
1 100 OK
2 250 350 NOT OK
3 300 NULL NULL COLUMN_A
4 NULL 400 NULL COLUMN_B
Based on the below condition .
If COLUMN_A = COLUMN_B (THEN DISPLAY ROW1 Output)
COLUMN_A != COLUMN_B (THEN DISPLAY ROW2 oUTPUT)
IF COLUMN_B IS NULL THEN DISPLAY ROW3 Output
IF COLUMN_A IS NULL THEN DISPLAY ROW4 Output
Upvotes: 0
Views: 5236
Reputation: 3929
Try selecting the columns and using the case to evaluate each row:
SELECT COLUMN_A, COLUMN_B
, CASE WHEN COLUMN_A <> COLUMN_B THEN 'Not OK' ELSE 'OK' END AS [Status]
FROM Table1
Per your comments, you can have multiple cases within a single case statement: * Update - While not elegant, you can handle each necessary case with it's own statement. Since you want to determine what column is null, you will want to evaluate that first, then perform the not equals comparison.
SELECT COLUMN_A, COLUMN_B, COLUMN_C, COLUMN_D
, CASE WHEN COLUMN_A IS NULL THEN 'A is NULL'
WHEN COLUMN_B IS NULL THEN 'B is NULL'
WHEN COLUMN_C IS NULL THEN 'C is NULL'
WHEN COLUMN_C IS NULL THEN 'D is NULL'
WHEN COLUMN_A <> COLUMN_B THEN 'Not OK'
WHEN COLUMN_A <> COLUMN_B THEN 'Not OK AB'
WHEN COLUMN_B <> COLUMN_C THEN 'Not OK BC'
WHEN COLUMN_C <> COLUMN_D THEN 'Not OK CD'
ELSE 'OK' END AS [Status]
FROM Table1
However, if you only want three columns, a union or union all would be a reasonable way to go.
Upvotes: 1
Reputation: 30765
If you want to get a different output for NULL values, you'll have to handle them explicitly:
with table1(column_a, column_b) as (
select 1, 2 from dual union all
select 2, 2 from dual union all
select 3, null from dual union all
select null, 4 from dual union all
select null, null from dual
)
SELECT
COLUMN_A,
COLUMN_B,
CASE
WHEN COLUMN_A <> COLUMN_B THEN 'Not OK'
WHEN column_a is null and column_b is null then 'both NULL'
WHEN column_a is null then 'A null'
WHEN column_b is null then 'B null'
ELSE 'OK' END AS Status
FROM Table1
Upvotes: 0