Reputation: 126
Given with the query below
Select COLUMN_ID, (Select
CASE COLUMN_ID
WHEN 4 THEN 'WEIGHT'
WHEN 6 THEN 'CARGO_LENGTH'
WHEN 7 THEN 'WIDTH'
WHEN 8 THEN 'HEIGHT'
END
GROOVE
FROM ALL_TAB_COLS where TABLE_NAME = 'TBL_CARGO')
FROM ALL_TAB_COLS where COLUMN_ID IN(4,6,7,8)
I like to get only non blank columns. I'm expecting the output 4 6 7 8 displayed per field. How do I do that?
Upvotes: 2
Views: 203
Reputation: 13700
Try this
Select COLUMN_ID,
CASE COLUMN_ID
WHEN 4 THEN 'WEIGHT'
WHEN 6 THEN 'CARGO_LENGTH'
WHEN 7 THEN 'WIDTH'
WHEN 8 THEN 'HEIGHT'
END
GROOVE
FROM ALL_TAB_COLS where TABLE_NAME = 'TBL_CARGO'
and COLUMN_ID IN(4,6,7,8)
Upvotes: 0
Reputation: 44766
No need for a sub-select, just add the CASE
expression. Something like this perhaps?
Select COLUMN_ID,
CASE COLUMN_ID WHEN 4 THEN 'WEIGHT'
WHEN 6 THEN 'CARGO_LENGTH'
WHEN 7 THEN 'WIDTH'
WHEN 8 THEN 'HEIGHT'
END GROOVE
FROM ALL_TAB_COLS
where COLUMN_ID IN(4,6,7,8)
Upvotes: 0
Reputation: 49082
All that sub-query and in-line view could be done in single query:
Using CASE expression(verbose and easy to understand):
SELECT COLUMN_ID,
CASE COLUMN_ID
WHEN 4
THEN 'WEIGHT'
WHEN 6
THEN 'CARGO_LENGTH'
WHEN 7
THEN 'WIDTH'
WHEN 8
THEN 'HEIGHT'
END GROOVE
FROM ALL_TAB_COLS
WHERE TABLE_NAME = 'TBL_CARGO'
AND COLUMN_ID IN(4,6,7,8);
Using DECODE(looks short):
SELECT COLUMN_ID,
DECODE(COLUMN_ID, 4, 'WEIGHT', 6, 'CARGO_LENGTH', 7, 'WIDTH', 8, 'HEIGHT')
FROM ALL_TAB_COLS
WHERE TABLE_NAME = 'TBL_CARGO'
AND COLUMN_ID IN(4,6,7,8);
Upvotes: 2