Необходимо запросить данные из таблицы с помощью функции nvl

У меня есть таблица, которая имеет несколько столбцов. Скажем, столбцы - это С1, С2, С3 и С4.

C1 contains daytime, 
C2 contains names,
C3 is the numeric values and 
C4 have 2 values repeatedly say a and b.

Теперь мне нужно запросить данные таким образом, чтобы в дневное время возвращалось значение, присутствующее в C3, соответствующее a.C4. Если C3 не имеет значения для a.C4, это должно дать мне значение в C3 для b.C4.

1 ответ

Ваши данные выглядят примерно так:

Jan12, Tom, 1, a
Jan12, Tom, 2, b
Jan13, Bob, 3, a
Jan14, Sue, 4, b

Я думаю, что вы говорите, что хотите запустить (запрос 1):

SELECT C3 from TBL WHERE C1=<Datetime> and C4='a' and C3 is not null

Однако, если запись не найдена, вы хотите выполнить (Запрос 2):

SELECT C3 from TBL WHERE C1=<Datetime> and C4='b'

Если это ваша цель, рассмотрим второй запрос. Чтобы исключить все, что вернуло бы запись через первый запрос, вы можете сделать это (обратите внимание, что изменен только второй запрос) (Запрос 2A):

SELECT C3 from TBL WHERE C1=<Datetime> and C4='b'
   and NOT EXISTS (SELECT * from TBL WHERE C1=<Datetime> and C4='a')

Итак, теперь у вас есть два запроса с взаимоисключающими результатами. Вы можете просто ОБЪЕДИНИТЬ их вместе и запустить их как один (Финальный, комбинированный запрос).

SELECT C3 from TBL WHERE C1=<Datetime> and C4='a' and C3 is not null
UNION ALL
SELECT C3 from TBL WHERE C1=<Datetime> and C4='b'
   and NOT EXISTS (SELECT * from TBL WHERE C1=<Datetime> and C4='a')
Другие вопросы по тегам