powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Интересный select
17 сообщений из 17, страница 1 из 1
Интересный select
    #40037033
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
Доброго дня!

Нужно сгруппировать две колонки таблицы и получить результат через запятую.
Вопрос как получить минимальное число строк результата.

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
with
  T as
  (
    select '1' A, '5' B from Dual union all
    select '2' A, '5' B from Dual union all
    select '3' A, '5' B from Dual union all
    select '1' A, '6' B from Dual union all
    select '2' A, '6' B from Dual union all
    select '3' A, '6' B from Dual union all
    select '1' A, '7' B from Dual union all
    select '2' A, '7' B from Dual union all
    select '4' A, '7' B from Dual union all

    select 'E' A, 'A' B from Dual union all
    select 'E' A, 'B' B from Dual union all
    select 'E' A, 'C' B from Dual union all
    select 'F' A, 'A' B from Dual union all
    select 'F' A, 'B' B from Dual union all
    select 'F' A, 'C' B from Dual union all
    select 'G' A, 'A' B from Dual union all
    select 'G' A, 'B' B from Dual union all
    select 'G' A, 'D' B from Dual
  ),
  GroupByA as
  (
    select A, ListAgg(B, ', ') within group(order by B) B
    from T
    group by A
  ),
  GroupByB as
  (
    select ListAgg(A, ', ') within group(order by A) A, B
    from T
    group by B
  )
select 'Group By A' Type, A, B
from GroupByA
union all
select 'Group By B' Type, A, B
from GroupByB
union all
select 'Group By A, B' Type, ListAgg(A, ', ') within group(order by A) A, B
from GroupByA
group by B
union all
select 'Group By B, A' Type, A, ListAgg(B, ', ') within group(order by B) B
from GroupByB
group by A
order by Type, A, B
/



Пояснение:
Group By A - промежуточный результат
Group By B - промежуточный результат
Group By A, B - окончательный результат (вариант 1)
Group By B, A - окончательный результат (вариант 2)

Как видно оба варианта не дают минимальное число строк.
...
Рейтинг: 0 / 0
Интересный select
    #40037036
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Цель какая? Убери груп бай и сделай два агрегата - будет минимальная одна строка.

упд. Или добавь к любому из своих запросов where 1 = 0, будет ещё меньше.
...
Рейтинг: 0 / 0
Интересный select
    #40037039
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
env,

Должно сохраняться соответствие между колонками
...
Рейтинг: 0 / 0
Интересный select
    #40037042
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ничего не понятно. Покажи, какой результат нужно получить (с комментариями).
...
Рейтинг: 0 / 0
Интересный select
    #40037047
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
PuM256,

Нужно получить 4 строки:
Код: plaintext
1.
2.
3.
E, F	A, B, C
G	A, B, D
1, 2, 3	5, 6
1, 2, 4	7
...
Рейтинг: 0 / 0
Интересный select
    #40037053
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
PuM256,

Вариант Group By A, B дает 5 строк (2 с буквами и 3 с цифрами)
Вариант Group By B, A дает 5 строк (3 с буквами и 2 с цифрами)
...
Рейтинг: 0 / 0
Интересный select
    #40037054
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YBZ,

Реальная задача какая?
...
Рейтинг: 0 / 0
Интересный select
    #40037059
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
env,

В колонке A - программы страхования
В колонке B - лечебные учреждения

Нужно в Дополнительном соглашении писать:
с 01.01.2020 включить в договор страхования "Программа 1" с обслуживанием в "ЛПУ 1".
с 01.01.2020 включить в договор страхования "Программа 1" с обслуживанием в "ЛПУ 2".
с 01.01.2020 включить в договор страхования "Программа 2" с обслуживанием в "ЛПУ 1".
с 01.01.2020 включить в договор страхования "Программа 2" с обслуживанием в "ЛПУ 2".
Тоже самое:
с 01.01.2020 включить в договор страхования "Программа 1", "Программа 2" с обслуживанием в "ЛПУ 1", "ЛПУ 2".
...
Рейтинг: 0 / 0
Интересный select
    #40037060
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И она не решается двумя listagg после соответствующего where?

упд. сам спросил, сам и отвечу. Не решается , если есть "Программа 1" с обслуживанием в "ЛПУ 3".
...
Рейтинг: 0 / 0
Интересный select
    #40037063
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
env,

Можно решение?
...
Рейтинг: 0 / 0
Интересный select
    #40037260
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
Может есть решение?
...
Рейтинг: 0 / 0
Интересный select
    #40037296
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YBZ,

для начала скажи - есть данные в нормализованном виде?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with Programs as(
select 1 id, 'Программа 1' name from dual union all
select 2 id, 'Программа 2' from dual union all
select 3 id, 'Программа 3' from dual union all
select 4 id, 'Программа 4' from dual union all
select 5 id, 'Программа 5' from dual union all
select 6 id, 'Программа 6' from dual
),
Institution as(
select 1 id, 'ЛПУ-1' name from dual union all
select 2 id, 'ЛПУ-2' name from dual union all
select 3 id, 'ЛПУ-3' name from dual
),
relations as
(
select 1 ProgramsId, 1 InstitutionId from dual union all
select 1 ProgramsId, 2 InstitutionId from dual union all
select 2 ProgramsId, 1 InstitutionId from dual
)
...
Рейтинг: 0 / 0
Интересный select
    #40037345
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YBZ,

Кардинальность программ и ЛПУ одинаковая или всё-таки есть перекос в стоорону ЛПУ?
...
Рейтинг: 0 / 0
Интересный select
    #40037499
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
andreymx,

Код: 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.
41.
42.
43.
44.
45.
46.
47.
48.
with
  T as
  (
    select '1' A, '5' B from Dual union all
    select '2' A, '5' B from Dual union all
    select '3' A, '5' B from Dual union all
    select '1' A, '6' B from Dual union all
    select '2' A, '6' B from Dual union all
    select '3' A, '6' B from Dual union all
    select '1' A, '7' B from Dual union all
    select '2' A, '7' B from Dual union all
    select '4' A, '7' B from Dual union all

    select 'E' A, 'A' B from Dual union all
    select 'E' A, 'B' B from Dual union all
    select 'E' A, 'C' B from Dual union all
    select 'F' A, 'A' B from Dual union all
    select 'F' A, 'B' B from Dual union all
    select 'F' A, 'C' B from Dual union all
    select 'G' A, 'A' B from Dual union all
    select 'G' A, 'B' B from Dual union all
    select 'G' A, 'D' B from Dual
  ),
  Programs as
  (
    select RowNum ID, A, 'Программа ' || A Name
    from
    (
      select distinct A
      from T
    )
  ),
  Institution as
  (
    select RowNum ID, B, 'ЛПУ ' || B Name
    from
    (
      select distinct B
      from T
    )
  ),
  Relations as
  (
    select P.ID ProgramsId, I.ID InstitutionId
    from T
    join Programs    P on P.A = T.A
    join Institution I on I.B = T.B
  )
...
Рейтинг: 0 / 0
Интересный select
    #40037501
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
env,

Не понял вопрос.
В общем случае ЛПУ в разы больше, чем программ.
...
Рейтинг: 0 / 0
Интересный select
    #40037508
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YBZ
В общем случае ЛПУ в разы больше, чем программ

YBZGroup By A, B

С точки зрения конечного пользователя, при таком перевесе, удобнее видеть список программ, где пересечение по ЛПУ полное, и отдельно программы, не пересекающиеся с другими по списку ЛПУ.
...
Рейтинг: 0 / 0
Интересный select
    #40037617
YBZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
YBZ
Гость
env
С точки зрения конечного пользователя, при таком перевесе, удобнее видеть список программ, где пересечение по ЛПУ полное, и отдельно программы, не пересекающиеся с другими по списку ЛПУ.


Возможно Вы правы.

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


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