Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Глупый вопрос  [new]
Demokratichna Babushka
Guest
Пишу запрос, натыкаюсь на дурацкое место:
есть запрос, в котором из разных записей посредством MIN и MAX выбираются разные значения по разным параметрам.
Пример:

№ Параметр Тип параметра
1 Значение1 Тип 1
2 Тип 2
3 Значение3 Тип 3

Как сделать так, чтобы, не трогая верхнего запроса, вытащить данные в соответствии с правилами:
Выбрать Тип 2, если пустой, то Тип 1, если пустой, то Тип 3.
26 авг 14, 16:13    [16495082]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
silver_M
Guest
Demokratichna Babushka,

COALESCE
26 авг 14, 17:22    [16495654]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Demokratichna Babushka
Guest
COALESCE разве не для одной строки функция?
Немного упрощу и уточню.
Есть запрос:

SELECT '1' hz, 'Z' zz FROM DUAL
        UNION
        SELECT '2', 'A' FROM DUAL
        UNION
        SELECT '3', '' FROM DUAL


Нужно выбрать поле ZZ, имеющее максимальный HZ, при этом поле ZZ не должно быть пустым.
То есть, для случая выше должно быть выбрано A.
Для случая ниже - Z:

SELECT '1' hz, '' zz FROM DUAL
        UNION
        SELECT '2', 'A' FROM DUAL
        UNION
        SELECT '3', 'Z' FROM DUAL
27 авг 14, 16:11    [16502113]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Corner
Member

Откуда:
Сообщений: 1270
тут
27 авг 14, 16:16    [16502159]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
st07mnn
Member

Откуда:
Сообщений: 41
with t as
(SELECT '1' hz, 'Z' zz FROM DUAL
        UNION
        SELECT '2', 'A' FROM DUAL
        UNION
        SELECT '3', '' FROM DUAL)
select
    max(t.zz) keep (dense_rank last order by t.hz NULLS LAST) as result
from t
where t.zz is not null;
27 авг 14, 16:18    [16502185]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Ryuu
Member

Откуда:
Сообщений: 549
Мне кажется, все можно решить банальным CASE, но условие поставлено так, что я ни черта не понял.
27 авг 14, 16:19    [16502191]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
st07mnn
Member

Откуда:
Сообщений: 41
Опечатался. NULLS FIRST, если hz может быть NULL'ом
27 авг 14, 16:20    [16502205]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Demokratichna Babushka
Guest
st07mnn,

Спасибо большое, кажется, подходит.
Опечатка попалась, исправлено путем выбора не последней, а первой позиции (KEEP (dense_rank first order by t.hz nulls last)).
27 авг 14, 16:33    [16502305]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Ryuu
Member

Откуда:
Сообщений: 549
Demokratichna Babushka, не правильно исправили, он же написал.
автор
Опечатался. NULLS FIRST, если hz может быть NULL'ом
27 авг 14, 16:39    [16502352]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Demokratichna Babushka
Guest
Ryuu,

А разве в данной ситуации не будет равно?

KEEP (dense_rank first order by t.hz nulls last)
KEEP (dense_rank last order by t.hz nulls first)

Я с аналитикой почти не работаю, поэтому сложности...
27 авг 14, 16:43    [16502381]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
Vint
Member

Откуда: Москва
Сообщений: 4564
Demokratichna Babushka,
это не аналитика. и разница будет.
27 авг 14, 16:44    [16502393]     Ответить | Цитировать Сообщить модератору
 Re: Глупый вопрос  [new]
stax..
Guest
Demokratichna Babushka,

для
SELECT '1' hz, 'Z' zz FROM DUAL
        UNION
        SELECT '2', 'A' FROM DUAL
        UNION
        SELECT '11', 'Y' FROM DUAL
        UNION
        SELECT '3', '' FROM DUAL
/


шо должно вернуть?

.....
stax
27 авг 14, 17:42    [16502773]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить