powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросом
8 сообщений из 8, страница 1 из 1
Помогите с запросом
    #40119982
Dimets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть табличка

with t (id, param) as (
select 1, 'param1' from dual union all
select 1, null from dual union all
select 2, 'param3' from dual union all
select 3, null from dual
)

Нужно получить результат вида
1, param 1
2, param 3
3, null

Т.е. если для id есть записи с param!=null то выводим только их, если есть только одна запись с param = null то выводим ее
...
Рейтинг: 0 / 0
Помогите с запросом
    #40119989
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimets,

если null несколько?

select 3, null from dual union all
select 3, null from dual
...
Рейтинг: 0 / 0
Помогите с запросом
    #40119994
Dimets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
Dimets,

если null несколько?

select 3, null from dual union all
select 3, null from dual


да может, тогда любой из id, не важно какой
...
Рейтинг: 0 / 0
Помогите с запросом
    #40120000
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimets

да может, тогда любой из id, не важно какой

для
select 1, 'param1' from dual union all
select 1, null from dual union all
select 2, 'param3' from dual union all
select 2, 'param3' from dual union all
select 2, 'param4' from dual union all
select 3, '' from dual union all
select 3, '' from dual union all
select 4, null from dual

ответ с 1 null допустим?
или для null надо ид где все строки с null?
....
stax
...
Рейтинг: 0 / 0
Помогите с запросом
    #40120004
Dimets
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax
Dimets

да может, тогда любой из id, не важно какой

для
select 1, 'param1' from dual union all
select 1, null from dual union all
select 2, 'param3' from dual union all
select 2, 'param3' from dual union all
select 2, 'param4' from dual union all
select 3, '' from dual union all
select 3, '' from dual union all
select 4, null from dual

ответ с 1 null допустим?
или для null надо ид где все строки с null?
....
stax


нет, если есть без только их выводим, а null отбрасываем, т.е. только id=1 и param1
...
Рейтинг: 0 / 0
Помогите с запросом
    #40120005
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimets
Stax
пропущено...

для
select 1, 'param1' from dual union all
select 1, null from dual union all
select 2, 'param3' from dual union all
select 2, 'param3' from dual union all
select 2, 'param4' from dual union all
select 3, '' from dual union all
select 3, '' from dual union all
select 4, null from dual

ответ с 1 null допустим?
или для null надо ид где все строки с null?
....
stax


нет, если есть без только их выводим, а null отбрасываем, т.е. только id=1 и param1


Для ID=3 что выводим? Две строки или одну? Если одну:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
with t (id, param) as (
 select 1, 'param1' from dual union all
 select 1, 'param99' from dual union all
 select 1, null from dual union all
 select 2, 'param3' from dual union all
 select 2, 'param3' from dual union all
 select 2, 'param4' from dual union all
 select 3, '' from dual union all
 select 3, '' from dual union all
 select 4, null from dual
),
x as (
      select t.*,
             case
               when max(param) over(partition by id) is null then row_number() over(partition by id order by 1)
               when param is null then 0
               else 1
             end flag 
        from  t
     )
select  id,
        param
  from  x
  where flag = 1
  order by id
/

        ID PARAM
---------- -------
         1 param1
         1 param99
         2 param3
         2 param3
         2 param4
         3
         4

7 rows selected.

SQL>



SY.
...
Рейтинг: 0 / 0
Помогите с запросом
    #40120017
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimets,
хотел за один проход (сортировку) сделать, но что-то голова не варит

за два прохода вариантов много

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> ed
Wrote file afiedt.buf

  1  with t (id, param) as (
  2  select 1, 'param1' from dual union all
  3  select 1, null from dual union all
  4  select 2, 'param3' from dual union all
  5  select 2, 'param3' from dual union all
  6  select 2, 'param4' from dual union all
  7  select 3, '' from dual union all
  8  select 3, '' from dual union all
  9  select 4, null from dual
 10  )
 11  ,tt as ( select  t.*,max(param) over (partition by param) m from t)
 12  ,ttt as (select tt.*,sum(decode(m,null,1)) over (order by param rows between unbounded preceding and current row) n from tt)
 13* select id,param from ttt where m is not null or  n=1
SQL> /

        ID PARAM
---------- ------
         1 param1
         2 param3
         2 param3
         2 param4
         4 null

SQL>


.....
stax
...
Рейтинг: 0 / 0
Помогите с запросом
    #40120020
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

я так понял для
select 3, '' from dual union all
select 3, '' from dual union all
select 4, null from dual

надо вывести одну строку (любую)

зы
спасибо
не знал/забыл (не использовал) when over(1) ... then over (2)

....
stax
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросом
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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