Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Кантеканация данных, которые скрыл distinct / 25 сообщений из 55, страница 1 из 3
30.08.2018, 07:43
    #39695290
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Привет всем!

Distinct убирает ненужные строки как нужно. Но вот возник вопрос, у меня есть поле "Коды".

Как сделать так, чтобы в этом поле "Коды", где distinct убрал лишние поля, записались данные через запятую.

Например остался код "228" и к нему через запятую приписываются "1337", "113", которые были убраны Distinct'om.
...
Рейтинг: 0 / 0
30.08.2018, 07:45
    #39695292
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_DonНапример остался код "228" и к нему через запятую приписываются "1337", "113", которые были убраны Distinct'om.Несусветный бред.

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
30.08.2018, 08:01
    #39695297
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Distinct убрал лишние строки в выборке, как и нужно. С этим проблем нет.

Но мне надо чтобы в поле "Коды" через запятую добавились значения строк, которые там выбыли через distinct.
...
Рейтинг: 0 / 0
30.08.2018, 08:07
    #39695298
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Есть рабочий центр 2 и 3. Дистинкт у меня убирает лишние строки по этим рабочим центрам.

Необходимо, чтобы в строках


Пример таблицы:


Рабочий центр Код
2 228
2 1337
2 123
3 31
3 19

Нужно, чтобы стало так:

Рабочий центр Код
2 228, 1337, 123
3 31, 19

Может так наверное будет понятнее. Просто так объяснить не могу (бестолоч).
...
Рейтинг: 0 / 0
30.08.2018, 08:08
    #39695299
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_Donзначения строк, которые там выбыли через distinct.Не пори чушь.

http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
30.08.2018, 08:10
    #39695301
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_Donбестолоч _ Безграмотная невежда.

RTFM group by
...
Рейтинг: 0 / 0
30.08.2018, 08:14
    #39695302
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Elic,

я смотрю ты борзый такой тип. Таблица, которую я привёл в пример ни как не сможет прояснить ситуацию?
...
Рейтинг: 0 / 0
30.08.2018, 08:18
    #39695303
andreymx
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
group by + listagg
...
Рейтинг: 0 / 0
30.08.2018, 08:19
    #39695304
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
авторElic,

Tihiy_Don
бестолоч_
Безграмотная невежда.

RTFM group by

Как бы, бестолочью я себя назвал вообще-то.
...
Рейтинг: 0 / 0
30.08.2018, 08:23
    #39695305
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_Don,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
  1  with t(id,kod) as (
  2  select 2, 228 from dual union all
  3  select 2, 1337 from dual union all
  4  select 2, 123 from dual union all
  5  select 3, 31 from dual union all
  6  select 3, 19 from dual)
  7  select
  8   id
  9  ,listagg(kod, ',') within group(order by null) kod_list
 10  from t
 11* group by id
SQL> /

        ID KOD_LIST
---------- --------------------
         2 123,1337,228
         3 19,31



зи
если кодов очень много, гляньте XMLAGG

......
stax
...
Рейтинг: 0 / 0
30.08.2018, 08:31
    #39695309
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Имею такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
      distinct
      b.obor
    , a.opis
    , b.rabc
    , b.kods
    , a.model
    , a.har
from t1 a, t2 b
where b.kods<>' '
    and a.code=b.obor
    and (trim(b.rabc) >= '2' and trim(b.rabc) <= '3')



Как бы впиндюрить эту интересную функцию LISTAGG. Сейчас попробую и отпишусь как отработает)
...
Рейтинг: 0 / 0
30.08.2018, 08:34
    #39695311
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
В общем выдает ошибку, что групповая функция не является одногруппной.
...
Рейтинг: 0 / 0
30.08.2018, 08:43
    #39695314
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_DonВ общем выдает ошибку, что групповая функция не является одногруппной.Иди в менеджеры клининговых услуг. Там думать необязательно.
...
Рейтинг: 0 / 0
30.08.2018, 08:51
    #39695316
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Чувствуется крепкая дистинктивная школа. Год назад:Tihiy_DonКоллега, который меня обучает утверждает что динстинкт необходим .
...
Рейтинг: 0 / 0
30.08.2018, 08:54
    #39695318
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Ещё один умник выискался))
...
Рейтинг: 0 / 0
30.08.2018, 09:09
    #39695326
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_Don,

покажи desc t2
...
Рейтинг: 0 / 0
30.08.2018, 09:26
    #39695343
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_DonИмею такой запрос:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
select
      distinct
      b.obor
    , a.opis
    , b.rabc
    , b.kods
    , a.model
    , a.har
from t1 a, t2 b
where b.kods<>' '
    and a.code=b.obor
    and (trim(b.rabc) >= '2' and trim(b.rabc) <= '3')



Как бы впиндюрить эту интересную функцию LISTAGG. Сейчас попробую и отпишусь как отработает)

какое поле "скрыл" distinct ?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
select
--      distinct
      b.obor
    , a.opis
    , b.rabc
    , b.kods
    , a.model
    , a.har
    ,listagg(kod, ',') within group(order by null) kod_list
from t1 a, t2 b
where b.kods<>' '
    and a.code=b.obor
    and (trim(b.rabc) >= '2' and trim(b.rabc) <= '3')
group by
      b.obor
    , a.opis
    , b.rabc
    , b.kods
    , a.model
    , a.har
...
Рейтинг: 0 / 0
30.08.2018, 09:42
    #39695350
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Пробовал до этого сделать как в Вашем примере. И получается, что он выводит через запятую абсолютно одинаковые цифры и не убирает лишние строки, как до этого убирал дистинкт. Пробовал с дистинктом не помогло, прочитал в интернете, что это функция не работает с функцией дистинкт.
...
Рейтинг: 0 / 0
30.08.2018, 09:55
    #39695356
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_Don,

в подзапрос
Код: 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.
51.
52.
SQL> ed
Wrote file afiedt.buf

  1  with t(id,kod) as (
  2  select 2, 228 from dual union all
  3  select 2, 123 from dual union all
  4  select 2, 1337 from dual union all
  5  select 2, 123 from dual union all
  6  select 3, 31 from dual union all
  7  select 3, 31 from dual union all
  8  select 3, 31 from dual union all
  9  select 3, 31 from dual union all
 10  select 3, 19 from dual)
 11  select
 12   id
 13  ,listagg(kod, ',') within group(order by null) kod_list
 14  from t
 15* group by id
SQL> /

        ID KOD_LIST
---------- --------------------
         2 123,123,1337,228
         3 19,31,31,31,31

SQL> ed
Wrote file afiedt.buf

  1  with t(id,kod) as (
  2  select 2, 228 from dual union all
  3  select 2, 123 from dual union all
  4  select 2, 1337 from dual union all
  5  select 2, 123 from dual union all
  6  select 3, 31 from dual union all
  7  select 3, 31 from dual union all
  8  select 3, 31 from dual union all
  9  select 3, 31 from dual union all
 10  select 3, 19 from dual)
 11  ,tt as (select distinct id,kod from t)
 12  select
 13   id
 14  ,listagg(kod, ',') within group(order by null) kod_list
 15  from tt
 16* group by id
SQL> /

        ID KOD_LIST
---------- --------------------
         2 123,1337,228
         3 19,31

SQL>




зи
можно и через row_number, имхо дело вкуса
Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t(id,kod) as (
  2  select 2, 228 from dual union all
  3  select 2, 123 from dual union all
  4  select 2, 1337 from dual union all
  5  select 2, 123 from dual union all
  6  select 3, 31 from dual union all
  7  select 3, 31 from dual union all
  8  select 3, 31 from dual union all
  9  select 3, 31 from dual union all
 10  select 3, 19 from dual)
 11  ,tt as (select id,kod,row_number() over (partition by id,kod order by null) rn  from t)
 12  select
 13   id
 14  ,listagg(decode(rn,1,kod), ',') within group(order by null) kod_list
 15  from tt
 16* group by id
SQL> /

        ID KOD_LIST
---------- --------------------
         2 123,1337,228
         3 19,31


.....
stax
...
Рейтинг: 0 / 0
30.08.2018, 10:00
    #39695358
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
авторзи
можно и через row_number, имхо дело вкуса

SQL> ed
Wrote file afiedt.buf

1 with t(id,kod) as (
2 select 2, 228 from dual union all
3 select 2, 123 from dual union all
4 select 2, 1337 from dual union all
5 select 2, 123 from dual union all
6 select 3, 31 from dual union all
7 select 3, 31 from dual union all
8 select 3, 31 from dual union all
9 select 3, 31 from dual union all
10 select 3, 19 from dual)
11 ,tt as (select id,kod,row_number() over (partition by id,kod order by null) rn from t)
12 select
13 id
14 ,listagg(decode(rn,1,kod), ',') within group(order by null) kod_list
15 from tt
16* group by id
SQL> /

ID KOD_LIST
---------- --------------------
2 123,1337,228
3 19,31

Тоже подумывал про роум намбер, спасибо за пример кода. Только у меня рабочих центров не 2, а множество. Я так понял, Вы конкретно через with выбираете рабочие центра.
...
Рейтинг: 0 / 0
30.08.2018, 10:10
    #39695362
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_Don
Тоже подумывал про роум намбер, спасибо за пример кода. Только у меня рабочих центров не 2, а множество. Я так понял, Вы конкретно через with выбираете рабочие центра.

про центры не совсем понятно, но

Код: 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.
SQL> ed
Wrote file afiedt.buf

  1  with t(
  2       obor
  3      , opis
  4      , rabc
  5      , kods
  6      , model
  7      , har
  8      , kod
  9  ) as (
 10  select 2,1,2,3,4,5,228 from dual union all
 11  select 2,1,2,3,4,5,123 from dual union all
 12  select 2,2,2,3,4,5,1337 from dual union all
 13  select 2,1,2,3,4,5,123 from dual union all
 14  select 3,1,2,3,4,5, 31 from dual union all
 15  select 3,1,2,3,4,5, 31 from dual union all
 16  select 3,1,2,3,4,5, 31 from dual union all
 17  select 3,1,2,3,4,5, 31 from dual union all
 18  select 3,1,2,3,4,5, 19 from dual)
 19  ,tt as (select t.*,row_number() over (
 20          partition by obor,opis,rabc,kods,model,har,kod order by null) rn  from t)
 21  select
 22       obor
 23      , opis
 24      , rabc
 25      , kods
 26      , model
 27      , har
 28   ,listagg(decode(rn,1,kod), ',') within group(order by null) kod_list
 29  from tt
 30  group by
 31       obor
 32      , opis
 33      , rabc
 34      , kods
 35      , model
 36*     , har
SQL> /

      OBOR       OPIS       RABC       KODS      MODEL        HAR KOD_LIST
---------- ---------- ---------- ---------- ---------- ---------- --------------------
         2          1          2          3          4          5 123,228
         2          2          2          3          4          5 1337
         3          1          2          3          4          5 19,31



.....
stax
...
Рейтинг: 0 / 0
30.08.2018, 10:45
    #39695389
Tihiy_Don
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Stax,

Большое спасибо, буду разбираться.
...
Рейтинг: 0 / 0
30.08.2018, 11:16
    #39695404
Lary Denis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Stax, у меня есть задача. Накидаешь пример решения?
...
Рейтинг: 0 / 0
30.08.2018, 11:24
    #39695410
17-77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
Tihiy_DonЕсть рабочий центр 2 и 3. Дистинкт у меня убирает лишние строки по этим рабочим центрам.

Необходимо, чтобы в строках


Пример таблицы:


Рабочий центр Код
2 228
2 1337
2 123
3 31
3 19

Нужно, чтобы стало так:

Рабочий центр Код
2 228, 1337, 123
3 31, 19

Может так наверное будет понятнее. Просто так объяснить не могу (бестолоч).
это не distinct, это конатенация значений с группировкой, в ms sql 2017 появилась встроенная функция под это STRING_AGG, а в 10 оракле была скрытая подобная, в 11 вроде ее открыли..... о нашел LISTAGG https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030
...
Рейтинг: 0 / 0
30.08.2018, 11:53
    #39695428
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Кантеканация данных, которые скрыл distinct
17-77это не distinct, это конатенация значений с группировкой, в ms sql 2017 появилась встроенная функция под это STRING_AGG, а в 10 оракле была скрытая подобная, в 11 вроде ее открыли..... о нашел LISTAGG https://docs.oracle.com/cd/E11882_01/server.112/e41084/functions089.htm#SQLRF30030

Дон имел ввиду что distinct с list_agg нельзя
ORA-30482: DISTINCT option not allowed for this function
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
  1* select deptno,count(distinct job) cc from emp group by deptno
SQL> /

    DEPTNO         CC
---------- ----------
        30          3
        20          3
        10          3

SQL> ed
Wrote file afiedt.buf

  1* select deptno, listagg(distinct job, ',') within group(order by null) job_list from emp group by deptno
SQL> /
select deptno, listagg(distinct job, ',') within group(order by null) job_list from emp group by deptno
               *
ERROR at line 1:
ORA-30482: DISTINCT option not allowed for this function



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


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