Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбор первого не нулевого варианта / 4 сообщений из 4, страница 1 из 1
06.10.2016, 18:22:31
    #39322232
nata44845
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор первого не нулевого варианта
Надо сделать запрос с условием, что если первый подзапрос ничего не возвращает, то второй подзапрос и т.д. 6 условий
Но первый подзапрос имеет важность выше, то есть если не нулевые оба, нужно выбрать первый.

Код: sql
1.
2.
3.
4.
5.
6.
7.
select dd.dept,dp.name, case 
when (select max(per) from x where x.dept=dd.id and  x.id=dp.id) is not null then (select max(per) from x where x.dept=dd.id and x.id=dp.id)
when (select max(per) from x where x.dept=dd.id and  x.id=dp.col1) is not null then (select max(per) from x where x.dept=dd.id and x.id=dp.col1)
when (select max(per) from x where x.dept=dd.id and  x.id=dp.col2) is not null then (select max(per) from x where x.dept=dd.id and x.id=dp.col2)
...
end per
from dp,dd



вот этот подзапрос два раза в case мне очень не нравится, есть еще вариант сделать через join (select unuon select union select) с ранжированием по степени важности, но надо обдумать как.

Запрос полный не писала еще, только прицениваюсь, отягощается тем, что нужно выбрать по всем отделам все продукты.
А вообще может выбрать не все продукты, а только те, где не null по итогу по условиям...
...
Рейтинг: 0 / 0
06.10.2016, 18:26:27
    #39322235
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор первого не нулевого варианта
RTFM COALESCE
...
Рейтинг: 0 / 0
06.10.2016, 18:33:08
    #39322244
nata44845
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор первого не нулевого варианта
Elic,

О, спасибо подходит.
...
Рейтинг: 0 / 0
06.10.2016, 20:56:34
    #39322307
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выбор первого не нулевого варианта
nata44845с ранжированием по степени важностиselect max(per) keep(dense_rank first order by степень_важности/*case*/) from x where x.dept=dd.id and per is not null
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Выбор первого не нулевого варианта / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]