Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select "одно ко многим" и удаление дублей. / 18 сообщений из 18, страница 1 из 1
09.01.2019, 16:43
    #39757326
Зурбаган
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Есть две таблицы с данными.
Первая таблица - Товар
Вторая таблица - Движение товара.
Если связать данные таблицы, то получается выборка в которой одна строка товара может повторяться несколько раз подряд, например:
Томаты50Тула МоскваТоматы10Тула ОрелТоматы5Тула ОмскОгурцы10Тула ТверьЯблоки10ТулаМосква

Можно ли в Oracle при помощи select сделать такой запрос, чтобы дубли не отображались, а была только первая строка?

Томаты50Тула МоскваТоматы50Тула Москва10Тула Орел5Тула ОмскОгурцы10Тула ТверьЯблоки10ТулаМосква

И как вообще такое сделать?
...
Рейтинг: 0 / 0
09.01.2019, 16:46
    #39757328
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
ЗурбаганМожно ли в Oracle при помощи select сделать такой запрос, чтобы дубли не отображались, а была только первая строка?Можно, но не нужно. Это нужно делать на клиенте / в отчёте.
...
Рейтинг: 0 / 0
09.01.2019, 16:48
    #39757331
Зурбаган
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Elic,
Каким образом на клиенте? При помощи обработчика, каждую строку анализируя?
...
Рейтинг: 0 / 0
09.01.2019, 16:51
    #39757336
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
ЗурбаганКаким образом на клиенте? При помощи обработчика, каждую строку анализируя?Это стандартная функция отчётника.
Например, RTFM BREAK (FAQ)
...
Рейтинг: 0 / 0
09.01.2019, 16:52
    #39757337
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
ЗурбаганКаким образом на клиенте?А в sql каким образом?
...
Рейтинг: 0 / 0
09.01.2019, 16:56
    #39757340
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Код: plsql
1.
2.
3.
4.
5.
6.
select  case row_number() over(partition by tbl.tovar order by ...)
          when 1 then tbl.tovar
        end tovar
        ...
  order by tbl.tovar,
           case row_number() over(partition by tbl.tovar order by ...)



SY.
...
Рейтинг: 0 / 0
09.01.2019, 16:56
    #39757342
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
ЗурбаганЕсть две таблицы с данными.
Первая таблица - Товар
Вторая таблица - Движение товара.
Если связать данные таблицы, то получается выборка в которой одна строка товара может повторяться несколько раз подряд, например:
Томаты50Тула МоскваТоматы10Тула ОрелТоматы5Тула ОмскОгурцы10Тула ТверьЯблоки10ТулаМосква

Можно ли в Oracle при помощи select сделать такой запрос, чтобы дубли не отображались, а была только первая строка?

Томаты50Тула МоскваТоматы50Тула Москва10Тула Орел5Тула ОмскОгурцы10Тула ТверьЯблоки10ТулаМосква

И как вообще такое сделать?
Для начала сделать подзапрос, в котором оконной функцией перенумеровать строки по сочетанию "номенклатура" - "город отправки" - "город приемки" и по убыванию штук. Чтобы для 50 было 1, для 10 - 2, для 5 - 3, затем для 10 огурцов - 1 и затем для 10 яблок - 1.

После этого запросом поверх первого запроса сделать select case when order_virtual_number = 1 then real_string_of_tovar else '' end as real_string_of_tovar, count_of_string_tovar, city_from, city_to from (select ..... from table)

И в столбце "Номенклатура" у Вас пойдет или реальное название для одной из строк, или пустота (но не NULL, а строка с нулевой длиной).
...
Рейтинг: 0 / 0
09.01.2019, 16:57
    #39757343
Anton_Demin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Зурбаган,

Код: plsql
1.
LAG/LEAD () OVER (ORDER BY )
...
Рейтинг: 0 / 0
09.01.2019, 16:58
    #39757344
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
SY,

Не "over(partition by tbl.tovar ", а "over(partiont by tbl.tovar, tbl.city_from, tbl.city_to"...
...
Рейтинг: 0 / 0
09.01.2019, 16:59
    #39757347
Andy_OLAP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
SY,

Приношу свои извинения - Вы правы, partition в данном случае только по номенклатуре. Вчитался внимательнее.
...
Рейтинг: 0 / 0
09.01.2019, 17:00
    #39757349
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
SY
Код: plsql
1.
case row_number()

Код: plsql
1.
lag(null
...
Рейтинг: 0 / 0
09.01.2019, 17:01
    #39757350
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
IMHO LAG + DECODE. Даже вложенные запросы не нужны.
...
Рейтинг: 0 / 0
09.01.2019, 17:04
    #39757357
SY
SY
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Andy_OLAPSY,

Не "over(partition by tbl.tovar ", а "over(partiont by tbl.tovar, tbl.city_from, tbl.city_to"...

Да ну?

Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
SQL> select  case row_number() over(partition by d.dname order by e.ename)
  2            when 1 then d.dname
  3          end dname,
  4          e.job,
  5          e.ename
  6    from  dept d,
  7          emp e
  8    where e.deptno = d.deptno
  9    order by d.dname,
 10             row_number() over(partition by d.dname order by e.ename)
 11  /

DNAME          JOB       ENAME
-------------- --------- ----------
ACCOUNTING     MANAGER   CLARK
               PRESIDENT KING
               CLERK     MILLER
RESEARCH       CLERK     ADAMS
               ANALYST   FORD
               MANAGER   JONES
               ANALYST   SCOTT
               CLERK     SMITH
SALES          SALESMAN  ALLEN
               MANAGER   BLAKE
               CLERK     JAMES
               SALESMAN  MARTIN
               SALESMAN  TURNER
               SALESMAN  WARD

14 rows selected.

SQL> select  case row_number() over(partition by d.dname,e.job,e.ename order by e.ename)
  2            when 1 then d.dname
  3          end dname,
  4          e.job,
  5          e.ename
  6    from  dept d,
  7          emp e
  8    where e.deptno = d.deptno
  9    order by d.dname,
 10             row_number() over(partition by d.dname,e.job,e.ename order by e.ename)
 11  /

DNAME          JOB       ENAME
-------------- --------- ----------
ACCOUNTING     PRESIDENT KING
ACCOUNTING     MANAGER   CLARK
ACCOUNTING     CLERK     MILLER
RESEARCH       CLERK     ADAMS
RESEARCH       ANALYST   SCOTT
RESEARCH       ANALYST   FORD
RESEARCH       CLERK     SMITH
RESEARCH       MANAGER   JONES
SALES          CLERK     JAMES
SALES          MANAGER   BLAKE
SALES          SALESMAN  ALLEN
SALES          SALESMAN  MARTIN
SALES          SALESMAN  TURNER
SALES          SALESMAN  WARD

14 rows selected.

SQL> 



SY.
...
Рейтинг: 0 / 0
09.01.2019, 17:04
    #39757358
-2-
-2-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Leonid KudryavtsevIMHO LAG + DECODE. Даже вложенные запросы не нужны.А decode зачем?
...
Рейтинг: 0 / 0
09.01.2019, 17:07
    #39757363
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
А как без него (или case) повторяющиеся значения на null заменить?

p.s. не сильно знаю аналитику, т.ч. ногами больно не пинать )))
...
Рейтинг: 0 / 0
09.01.2019, 17:11
    #39757366
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Leonid KudryavtsevА как без негоSTFF lag(null
...
Рейтинг: 0 / 0
09.01.2019, 17:51
    #39757422
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Leonid Kudryavtsev,

Код: 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.
  1  select
  2    lag(null,1,deptno) over (partition by deptno order by ename) dept_no
  3   ,ename
  4  from emp
  5* order by deptno,dept_no,ename
SQL> /

DEPT_NO                                  ENAME
---------------------------------------- ----------
10                                       CLARK
                                         KING
                                         MILLER
20                                       ADAMS
                                         FORD
                                         JONES
                                         SCOTT
                                         SMITH
30                                       ALLEN
                                         BLAKE
                                         JAMES
                                         MARTIN
                                         TURNER
                                         WARD

14 rows selected.



.....
stax
...
Рейтинг: 0 / 0
09.01.2019, 17:53
    #39757425
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Select "одно ко многим" и удаление дублей.
Stax,

ой
Код: plsql
1.
2.
3.
4.
5.
6.
  1  select
  2    lag(cast(null as number),1,deptno) over (partition by deptno order by ename) dept_no
  3   ,ename
  4  from emp
  5* order by deptno,dept_no,ename
SQL> /



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


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