Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по сортировке в таблице / 25 сообщений из 46, страница 1 из 2
05.11.2020, 16:15
    #40015596
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Добрый день!

Ситуация такая: есть таблица, в которой, условно говоря, для одной логической записи (сотрудник) может существовать несколько строк. У каждой такой строки есть колонка " FLAG ", со значениями: 0,1,2,3.

Сделано это для того, чтобы на основании флажков брать определенную ячейку и выводить ее на печать.
Т.е., например, 0 - это заголовок, тогда берется колонка 0, 1 - главные данные сотрудника, колонка 1а, 1б, 1в и т.д., 2 - какой-нибудь подытог для записи, агрегированный из других таблиц, колонка 2.
В уже готовой процедуре печати отчета есть запрос к этой таблице с указанием order by clmn1, clmn2, clmn3, clmn4.
Если поменять порядок сортировки, то все разъедется и будет непонятно, как записи друг с другом связаны в пределах одного сотрудника, так как уникальный номер сотрудника указан только в строке с флагом 1.
Т.е. вся эта хлипкая конструкция держится за счет сортировки.
Вопрос: как можно связать эти записи с флажками, чтобы их можно было разгруппировать, но при этом не сломать всю структуру?
Это мне нужно например, чтобы "навесить" сверху еще одну сортировку по другой колонке.
Помогите, пожалуйста, разобраться. Буду очень признателен за помощь.
Заранее спасибо.
...
Рейтинг: 0 / 0
05.11.2020, 16:22
    #40015600
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Лучше этот вопрос задать тому чудаку, который такую структуру спроектировал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.11.2020, 16:36
    #40015604
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Там, к сожалению, от комментариев воздержались. А у меня не хватает пока опыта, чтобы такую "конструкцию" переварить.
Может, есть у кого идеи?
...
Рейтинг: 0 / 0
05.11.2020, 16:50
    #40015609
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906,

Покажите пример данных и ожидаемый результат. По описанию - пока выглядит бредово.
...
Рейтинг: 0 / 0
05.11.2020, 16:50
    #40015610
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906
вся эта хлипкая конструкция держится за счет сортировки.

В таблице всегда записи только одного пользователя?
...
Рейтинг: 0 / 0
05.11.2020, 16:58
    #40015613
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906,

Похоже, что какой-то чудак однажды навытягивал данные из разных таблиц, а потов через union слил их в одну.
Я такое видел.

Но операция обратима. Постройте запрос который вернёт одну строку на сотрудника, и работайте с ним.

Вместо
ID, Flag, Property
5785, 0, уборщик,
5785, 1, Васильев
5785, 2, Игорь

Сделайте
ID, Title, LastName, FirstName
5785, уборщик, Васильев, Игорь

Для таблицы выше это было бы так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
Select tids.ID, 
      t0.Property as Title,
      t1.Property as LastName,
      t2.Property as FirstName
  from (select distinct ID from TBL) tids
  left join TBL t0 on tids.ID = t0.ID
  left join TBL t1 on tids.ID = t1.ID
  left join TBL t2 on tids.ID = t2.ID
 order by tids.ID



Если для некоторых сотрудников определенные атрибуты отсутствуют, в колонке результата будет null.
...
Рейтинг: 0 / 0
05.11.2020, 17:03
    #40015614
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Обычно ответ приходит быстрее и лучше, если ТС включает в вопрос больше данных о структурах таблиц, или пример неработающего кода. Иначе отвечающему приходится выдумывать свои имена колонок, и спрашивающему больше работы сопоставлять свое с чужим.

Всем больше работы -> качество помощи ниже.
...
Рейтинг: 0 / 0
05.11.2020, 17:06
    #40015619
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
НеофитSQL,

Вам книжку пора писать. "Вредные советы" называется.

Сами свой код пробовали выполнить хотя бы на своих трёх строках?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with TBL as
(
 select 1 id, 0 flag, 'head' property from dual union all
 select 1 id, 1 flag, 'Ivan' property from dual union all
 select 1 id, 3 flag, '500' property from dual
)
--код неофита перемножающий всё и вся
Select tids.ID, 
      t0.Property as Title,
      t1.Property as LastName,
      t2.Property as FirstName
  from (select distinct ID from TBL) tids
  left join TBL t0 on tids.ID = t0.ID
  left join TBL t1 on tids.ID = t1.ID
  left join TBL t2 on tids.ID = t2.ID
 order by tids.ID
...
Рейтинг: 0 / 0
05.11.2020, 17:08
    #40015622
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Для транспонирования столбца в строку есть pivot, либо агрегация через case.
...
Рейтинг: 0 / 0
05.11.2020, 17:20
    #40015628
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
env
НеофитSQL,

Вам книжку пора писать. "Вредные советы" называется.

Сами свой код пробовали выполнить хотя бы на своих трёх строках?

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with TBL as
(
 select 1 id, 0 flag, 'head' property from dual union all
 select 1 id, 1 flag, 'Ivan' property from dual union all
 select 1 id, 3 flag, '500' property from dual
)
--код неофита перемножающий всё и вся
Select tids.ID, 
      t0.Property as Title,
      t1.Property as LastName,
      t2.Property as FirstName
  from (select distinct ID from TBL) tids
  left join TBL t0 on tids.ID = t0.ID and t0.Flag = 0
  left join TBL t1 on tids.ID = t1.ID and t1.Flag = 1
  left join TBL t2 on tids.ID = t2.ID and t2.Flag = 2
 order by tids.ID



Поправил очевидную ошибку. (and Flag = ..)
...
Рейтинг: 0 / 0
05.11.2020, 17:24
    #40015629
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
За мелкие ошибки заранее извиняюсь, пишу с пляжа.
...
Рейтинг: 0 / 0
05.11.2020, 17:27
    #40015630
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
НеофитSQL,

А очевидную ошибку в ненужной выборке уникальных значений id и ненужных самоджойнов поправить ещё проще. Но это не имеет никакого отношения к задаче ТС.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with tbl as
(
 select 1 id, 0 flag, 'head' property from dual union all
 select 1 id, 1 flag, 'Ivan' property from dual union all
 select 1 id, 3 flag, '500' property from dual
)
select 
   *
from
   tbl
pivot (max(property) for flag in (0 "TITLE", 1 "NAME", 3 "SOMETHING"))
...
Рейтинг: 0 / 0
05.11.2020, 17:28
    #40015631
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906,

если для сотрудника всегда есть флаг=1 (ид сотрудника),
то его (ИД) можно распростанить на другие флаги (строки)
1) для флаг>1
2) и для флаг<1 (0)

самое простое ето last_value ignore nulls
так как есть флаги меньше 1, то возможно придется поизголятся

а и да, если версия (12+) позволяет то match_recognize

ps
order by clmn1, clmn2, clmn3, clmn4. задает порядок однозначно
.....
stax
...
Рейтинг: 0 / 0
05.11.2020, 17:34
    #40015634
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Stax,

Предлагаю дождаться ответа ТС с примером данных.
...
Рейтинг: 0 / 0
05.11.2020, 17:39
    #40015639
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Прошу прощения, таблицу смог приложить только в виде вложения.
...
Рейтинг: 0 / 0
05.11.2020, 17:45
    #40015644
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
Скинул основные колонки. Там есть еще, но там только суммы.
Получается, что при FLAG=0,печатается заголовок.
Если FLAG=1, то данные по сотруднику: ФИО, часть сумм.
FLAG=2 и 3 - итоговые суммы.
Сортировка в скрипте жесткая:
Код: plsql
1.
order by  E.ORDNUMB, PSTGRPNUM, A.FLAG, POST, A.IS_VAK, FIO



А мне надо, чтобы данные выводились по колонке "DEPT": сначала все записи по первому DEPT (подразделению), потом по следующему и до конца.
...
Рейтинг: 0 / 0
05.11.2020, 17:48
    #40015646
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
т.е. чтобы DEPT=Администрация со всеми связанными записями, потом DEPT="Акушерское...", потом три человека из DEPT=Бухгалтерия со всеми связанными записями.
...
Рейтинг: 0 / 0
05.11.2020, 17:49
    #40015647
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906Там, к сожалению, от комментариев воздержались.

Долби пока не расколются. Они же наверняка знают как к их собственной структуре писать
запросы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.11.2020, 17:54
    #40015649
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906А мне надо, чтобы данные выводились по колонке "DEPT"

Ну так поставь DEPT первым полем в жёсткую сортировку.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
05.11.2020, 17:54
    #40015650
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906,

Что-то не договариваете. В order by как минимум два алиаса - значит таблиц больше и есть поля для связи между ними.

Показывайте весь запрос или как минимум его значащие части.
...
Рейтинг: 0 / 0
05.11.2020, 18:24
    #40015665
НеофитSQL
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
env
НеофитSQL,

А очевидную ошибку в ненужной выборке уникальных значений id и ненужных самоджойнов поправить ещё проще. Но это не имеет никакого отношения к задаче ТС.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with tbl as
(
 select 1 id, 0 flag, 'head' property from dual union all
 select 1 id, 1 flag, 'Ivan' property from dual union all
 select 1 id, 3 flag, '500' property from dual
)
select 
   *
from
   tbl
pivot (max(property) for flag in (0 "TITLE", 1 "NAME", 3 "SOMETHING"))



pivot классная команда, я ей еще не пользовался, и на этом форуме за последние месяцы не видел.

Вы правильно заметили, что присутствует выборка уникальных значений, но возможно не поняли ее роли в моем запросе.
Вы думаете, от нее можно избавиться, и получить результат такой же, как pivot?
...
Рейтинг: 0 / 0
05.11.2020, 18:36
    #40015671
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906
т.е. чтобы DEPT=Администрация со всеми связанными записями, потом DEPT="Акушерское...", потом три человека из DEPT=Бухгалтерия со всеми связанными записями.


1) строки с флаг 0 я так понял можно выбросить
2)колонку dept заполните передыдущем значением (напр dept_srt)
3)отсортируйте по dept_srt,E.ORDNUMB, PSTGRPNUM, A.FLAG, POST, A.IS_VAK, FIO

ps
если не получится пишите
зыы
ленюсь набирать данные с картинки

.....
stax
...
Рейтинг: 0 / 0
05.11.2020, 18:50
    #40015679
booby
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906,

вот в этом вашем "там есть ещё" весь настоящий торф и сидит.

вы не показали ни одного из тех начальных столбцов, который входят в волшебный order by.
а, между тем, какое-то стартовое подмножество из этого order by - первые три или четыре поля и образуют составной ключ,
который вы и должны в любом случае учесть, чтобы получить любой другой нужный вам порядок сортировки.

Хм, сдается, "там" вам весьма разумно не ответили...
...
Рейтинг: 0 / 0
05.11.2020, 18:52
    #40015682
graycode
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
ak1906,

Пример данных в исходных таблицах дайте, можете обезличить, но структура должна быть такая же как в исходных таблицах.
...
Рейтинг: 0 / 0
05.11.2020, 19:47
    #40015705
Sayan Malakshinov
Модератор форума
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по сортировке в таблице
НеофитSQL
За мелкие ошибки заранее извиняюсь, пишу с пляжа.
ну, конечно...
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по сортировке в таблице / 25 сообщений из 46, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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