Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
Добрый день, подскажите как написать запрос, не получается придумать

Если isadditional = 1 тогда оставляем их
если isadditional is null тогда мы должны выбрать 1 запись c максимальным cardnum
в результате запрос должен вывести 3 записи

К сообщению приложен файл. Размер - 5Kb
5 дек 18, 11:39    [21754067]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
-2-
Member

Откуда:
Сообщений: 14095
petrovichvanya
запись c максимальным cardnum
а если это isadditional = 1?
5 дек 18, 11:50    [21754087]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
123йй
Member

Откуда:
Сообщений: 1446
petrovichvanya,

выбирай все isadditional = 1
+
выбрать 1 запись c максимальным cardnum где isadditional is null
5 дек 18, 11:51    [21754091]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
Dshedoo
Member

Откуда:
Сообщений: 241
with q(cardnum, status, isadd) as (
select null, 0, 1 from dual union all
select 6, 0, 1 from dual union all
select 5, 0, null from dual union all
select 4, 0, null from dual union all
select 3, 0, null from dual union all
select 2, 0, null from dual union all
select 1, 0, 1 from dual union all
select 0, 0, null from dual)

select * from q q1
where q1.isadd = 1 
or not exists (select 1 from q q2 where q1.cardnum < q2.cardnum and q1.isadd is null and q2.isadd is null)
5 дек 18, 11:53    [21754095]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
-2-,
тогда не учитываем их
5 дек 18, 12:07    [21754116]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
Сделал через объедение
select * from (
  
  select c.cardnum, c.status, c.isadditional, c.cardid from test c
  where c.isadditional = 1
  union all 
  select * from (
  select c.cardnum, c.status, c.isadditional, c.cardid from test c
  where  c.isadditional is null
  order by c.cardnum desc ) t
  where rownum = 1) r


Покидайте еще вариантов
5 дек 18, 12:09    [21754121]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
-2-
Member

Откуда:
Сообщений: 14095
petrovichvanya
не учитываем
переведи
5 дек 18, 12:11    [21754128]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
-2-, максимальный cardnum ищем по тем записям у которых нету isadditional = 1
5 дек 18, 12:22    [21754161]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1418
petrovichvanya
Покидайте еще вариантов

уникальное поле есть (id,rowid) ?

....
stax
5 дек 18, 12:25    [21754169]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
-2-
Member

Откуда:
Сообщений: 14095
petrovichvanya
максимальный cardnum ищем по тем записям у которых нету isadditional = 1
first/last group by rownum * isadditional
5 дек 18, 12:35    [21754194]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
Stax, есть

К сообщению приложен файл. Размер - 6Kb
5 дек 18, 12:43    [21754222]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1418
petrovichvanya,

SQL> ed
Wrote file afiedt.buf

  1  with q(cardid,cardnum, status, isadd) as (
  2  select 1,null, 0, 1 from dual union all
  3  select 2,6, 0, null from dual union all
  4  select 3,5, 0, null from dual union all
  5  select 4,4, 0, null from dual union all
  6  select 5,3, 0, null from dual union all
  7  select 6,2, 0, null from dual union all
  8  select 7,1, 0, 1 from dual union all
  9  select 8,0, 0, null from dual)
 10  select max(cardnum) max_cardnum
 11  from q
 12* group by decode(isadd,null,'0','1'||cardid /* уникальное поле*/)
SQL> /

MAX_CARDNUM
-----------
          1
null
          6


....
stax
5 дек 18, 12:48    [21754236]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 635
petrovichvanya,

Может так?
select case when isadd = 1 then 1
            when isadd is null then max(cardnum)
                  end xxx
from q
group by isadd, decode(isadd,1,rownum,isadd)
5 дек 18, 12:54    [21754251]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
всем спасибо помогли :)
5 дек 18, 13:11    [21754278]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
petrovichvanya
Member

Откуда:
Сообщений: 85
еще такой вопрос, если я хочу вывести еще поля(cardid например)
как тогда быть ?
5 дек 18, 13:19    [21754284]     Ответить | Цитировать Сообщить модератору
 Re: условие if  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1418
petrovichvanya
еще такой вопрос, если я хочу вывести еще поля(cardid например)
как тогда быть ?

  1  with q(cardid,cardnum, status, isadd) as (
  2  select 2499751,null, 0, 1 from dual union all
  3  select 2499752,6, 0, null from dual union all
  4  select 2499753,5, 0, null from dual union all
  5  select 2499754,4, 0, null from dual union all
  6  select 2499755,3, 0, null from dual union all
  7  select 2499756,2, 0, null from dual union all
  8  select 2499757,1, 0, 1 from dual union all
  9  select 2499758,0, 0, null from dual)
 10  select decode(isadd,null,cast(null as number),cardid) id,max(cardnum) max_cardnum
 11  from q
 12* group by decode(isadd,null,cast(null as number),cardid /* уникальное поле*/)
SQL> /

        ID MAX_CARDNUM
---------- -----------
null                 6
   2499751 null
   2499757           1


если полей много
1) row_number() over
2) keep first/last

....
stax
5 дек 18, 13:58    [21754343]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить