2015-07-03 2 views
2

Учитывая с запросом нижеРешение «однорядные подзапрос возвращает более одной строки» ошибка в Oracle SQL

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) 

Я хотел бы получить только дополнительные пустые столбцы. Я ожидаю вывод 4 6 7 8 на поле. Как мне это сделать?

+1

Избавьтесь от вида в режиме реального времени. Сделайте это в одном запросе, не требуется дополнительный запрос. Отправьте свой ввод и требуемый вывод. –

+0

Ваш подзадач возвращает одну строку за столбец в таблице TBL_CARGO. Мне непонятно, что вы пытаетесь выполнить - не могли бы вы добавить образец ввода (или инструкцию DDL для TBL_CARGO) и ожидаемый результат? –

+2

Почему вы просто не выбираете 'column_name' напрямую? –

ответ

2

Все, что подзапрос и рядный вид можно было бы сделать в одном запросе:

Использование СЛУЧАЙ выражение (многословным и легко понять):

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); 

Использование DECODE (выглядит краткое):

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); 
+0

Этот результат - то, что мне нужно. Спасибо за изучающего человека! – TDL

+0

@TDL Рад, что это помогло, пожалуйста, отметьте это как ответ, помогло бы другим. –

0

Нет необходимости в суб-выбора, просто добавьте CASE. Что-то вроде этого возможно?

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) 
+0

Почему вы удалили фильтр на имя_таблицы? –

+0

Хороший вопрос, я не мог узнать, куда его переместить из подвыборки ... Легко добавить, если потребуется. – jarlh

0

Попробуйте

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) 
Смежные вопросы