Гость
Map
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросом / 8 сообщений из 8, страница 1 из 1
14.12.2021, 16:00
    #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
14.12.2021, 16:15
    #40119989
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите с запросом
Dimets,

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

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

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

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


да может, тогда любой из id, не важно какой
...
Рейтинг: 0 / 0
14.12.2021, 16:50
    #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
14.12.2021, 16:56
    #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
14.12.2021, 17:08
    #40120005
SY
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
14.12.2021, 18:13
    #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
14.12.2021, 18:18
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите с запросом / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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