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

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

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

И как вообще такое сделать?
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757328
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганМожно ли в Oracle при помощи select сделать такой запрос, чтобы дубли не отображались, а была только первая строка?Можно, но не нужно. Это нужно делать на клиенте / в отчёте.
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757331
Зурбаган
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,
Каким образом на клиенте? При помощи обработчика, каждую строку анализируя?
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757336
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганКаким образом на клиенте? При помощи обработчика, каждую строку анализируя?Это стандартная функция отчётника.
Например, RTFM BREAK (FAQ)
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757337
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганКаким образом на клиенте?А в sql каким образом?
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757340
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
Select "одно ко многим" и удаление дублей.
    #39757342
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЗурбаганЕсть две таблицы с данными.
Первая таблица - Товар
Вторая таблица - Движение товара.
Если связать данные таблицы, то получается выборка в которой одна строка товара может повторяться несколько раз подряд, например:
Томаты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
Select "одно ко многим" и удаление дублей.
    #39757343
Фотография Anton_Demin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зурбаган,

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

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

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

Код: plsql
1.
lag(null
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757350
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IMHO LAG + DECODE. Даже вложенные запросы не нужны.
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757357
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Select "одно ко многим" и удаление дублей.
    #39757358
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevIMHO LAG + DECODE. Даже вложенные запросы не нужны.А decode зачем?
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757363
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как без него (или case) повторяющиеся значения на null заменить?

p.s. не сильно знаю аналитику, т.ч. ногами больно не пинать )))
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757366
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevА как без негоSTFF lag(null
...
Рейтинг: 0 / 0
Select "одно ко многим" и удаление дублей.
    #39757422
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Select "одно ко многим" и удаление дублей.
    #39757425
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
18 сообщений из 18, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Select "одно ко многим" и удаление дублей.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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