powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по сортировке в таблице
21 сообщений из 46, страница 2 из 2
Вопрос по сортировке в таблице
    #40015743
Правильный Вася
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я вижу всю ситуацию, то эта таблица является всего лишь продуктом какого-то отчёта перед выводом на печать.

И я совершенно не понимаю, зачем делать ДРУГОЙ ОТЧЁТ, опираясь на эту непонятную таблицу. Гораздо правильнее сделать ОТДЕЛЬНЫЙ отчёт без использования этой таблицы, а на основании ИСХОДНЫХ данных.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40015841
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
возможно не поняли ее роли в моем запросе

Уникальность не обязательно достигается через distinct, а pivot в данном случае это всего лишь удобная синтаксическая обёртка для
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
    id,
    case flag when 0 then max(property) end title,
    ...
from
    tbl
group by
    id 
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40015847
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Выкладываю все, так как, действительно, непонятно получается.
Сам запрос:

Код: 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.
for rec in
 (
  select A.*,
         decode(A.PERS_AGENT, null, 'Вакансия', PRSG_RPTF.sAGENT_FIO_SHORT(A.PERS_AGENT)) FIO,
         decode(A.PSDEPRN, null, nvl(B.NAME,B.CODE), nvl(C.PSDEP_NAME,C.CODE)) POST,
         D.CODE QUALIFCTG,
         (select i.name from ins_department i where i.rn =a.deptrn) dept,  --это я добавил в запрос
         nvl(nvl(E.NAME, E.CODE), 'ПКГ не определена') OFFCLS,
         nvl(nvl(F.NAME, F.CODE), 'КУ не определен') PSTGRP,
         decode(A.PRPSTGRP, 0, ' ', F.NUMB) PSTGRPNUM
    from CLNPSPFMTRF_LST A,
         CLNPOSTS        B,
         CLNPSDEP        C,
         PRQUALIFCTG     D,
         OFFICERCLS      E,
         PRPSTGRP        F
    where A.AUTHID = UTILIZER
      and A.POSTRN      = B.RN (+)
      and A.PSDEPRN     = C.RN (+)
      and A.PRQUALIFCTG = D.RN (+)
      and A.OFFICERCLS  = E.RN (+)
      and A.PRPSTGRP    = F.RN (+) --PRPSTGRP
    order by  E.ORDNUMB, PSTGRPNUM, A.FLAG, POST, A.IS_VAK, FIO
 )
 loop
 --тут данные согласно логике отчета выводятся на экран
end loop;
 



И во вложении табличка с результатом.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40015853
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak1906,

Для начала определитесь, что задаёт гранулярность отчёта, т.е. объединяет все строки одного пользователя. Как только определитесь, задача становится решаемой.

Как один из вариантов - растянуть название департамента внутри гранулы оконной функцией
Код: 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.
 SQL>  with dept as
  2  (
  3      select 1 d_id, 'hr' name from dual union all
  4      select 2, 'fin' from dual
  5  ),
  6  tbl as
  7  (
  8      select 11 u_id, null d_id, 'Petrov' prop, 1 flag from dual union all
  9      select 11, 1, null, 2 from dual union all
 10      select 22, null, 'Ivanov', 1 from dual union all
 11      select 22, null, 'Nachal`nik', 0 from dual union all
 12      select 22, 2, null, 2 from dual union all
 13      select 33, null, 'Sidorov', 1 from dual union all
 14      select 33, null, 'Calculator', 0 from dual union all
 15      select 33, 2, null, 2 from dual
 16  )
 17  select
 18      tbl.prop,
 19      min(dept.name) over (partition by tbl.u_id) d_name
 20  from
 21      tbl,
 22      dept
 23  where
 24      tbl.d_id = dept.d_id(+)
 25  order by
 26     d_name, u_id, flag
 27 /

PROP       D_N
---------- ---
Nachal`nik fin
Ivanov     fin
           fin
Calculator fin
Sidorov    fin
           fin
Petrov     hr
           hr

8 rows selected.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40015860
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Большое спасибо за исчерпывающий пример! Только не совсем понятно, колонка u_id какой аналог имеет в моем select-e?
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40015863
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak1906,

А вот с этим вам и надо разобраться. Могу только предположить, что возможно это a.authid , но уверенности в этом нет.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40015867
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще раз большое спасибо за советы!
Дальше попробую сам.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40016116
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env
НеофитSQL
возможно не поняли ее роли в моем запросе

Уникальность не обязательно достигается через distinct, а pivot в данном случае это всего лишь удобная синтаксическая обёртка для
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
select 
    id,
    case flag when 0 then max(property) end title,
    ...
from
    tbl
group by
    id 



Pivot компилировался и работал, а этот код не хочет: ORA-00979: not a GROUP BY expression

Без вложенных селектов такое можно починить?
Один Group By и так дороже чем distinct, а два тем более..
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40016423
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL,

А это потому что тут очевидная опечатка.

Код: plsql
1.
max(case flag when ...)
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40016475
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НеофитSQL

Один Group By и так дороже чем distinct, а два тем более..

Что, простите?
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40016528
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PuM256
НеофитSQL

Один Group By и так дороже чем distinct, а два тем более..

Что, простите?

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

А это потому что тут очевидная опечатка.

Код: plsql
1.
max(case flag when ...)



Не помогло, дает такую же ошибку в другом месте.
Как правильно развернуть pivot "своими словами", если такое возможно?

Код: 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
Вопрос по сортировке в таблице
    #40017693
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PuM256
НеофитSQL

Один Group By и так дороже чем distinct, а два тем более..

Что, простите?


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

Есть длиннющая тема у Гуру Тома: https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:32961403234212
Где он говорит что нет разницы, а потом сто человек ломают копья, бездоказательно.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017728
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Я поигрался


На SQL не пишут программы .
На SQL декларируют требования .
Ну язык такой.
Декларативный.

А программу (план исполнения) под требования пишет оптимизатор, вобравший в себя опыт тысяч индусов.
И, будучи кодером опытным, оптимизатор способен решать одну и ту же задачу многими способами.
Иногда - сотнями тысяч разных способов (не утрирую), от подходящих до крайне неудачных.

Вы же сравниваете производительность требований по результатам работы конкретных имплементаций, даже не рассматривая эти самые имплементации на предмет адекватности.
А затем делаете умное лицо и фонтанируете фантазией.

Потому Ваши "поигрушки", как правило, вызывают бурное веселье зала и довольно редко - желание вступать в профессиональное обсуждение.

Надеюсь на понимание.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017734
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

Когда гуру Том говорит, что в Оракле нет разницы в скорости, я ему доверяю - у него опыт.
Кроме того, у него есть позиция по этому вопросу

Ответы содержащие "не все так однозначно" позицией не являются, к знаниям не добавляют.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017737
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Когда гуру Том говорит, что в Оракле нет разницы в скорости, я ему доверяю - у него опыт.

1. "гуру" покинул Oracle пару-тройку лет как.
Я его даже в списках Oak Table не нашел (зато нашел нашего Тимура :) ).
Так что, несмотря на гигантский объем поделанной за десятилетия работы в области популяризации oracle rdbms, оставленный им массив знаний потихонечку начинает стареть.
От Тома еще можно книжки почитать, раз уж документация упорно "не заходит".
Но вообще лучше уже других кумиров поискать - Джонатан Льюис, Аруп Нанда, Стив Ферштейн, Танел Подер, Кэрри Миллсап - да много их. Некоторые блоги ведут, некоторые книжки пишут.
Из местных (действующих) не игнорьте Elic, xtender, Timur Akhmadeev... да тоже есть еще пока кого послушать.

2. "гуру" свое мнение базирует на глубоком знании предмета, а не на отсылках к авторитетам.
Знание предмета "гуру" добывал лично посредством хорошо поставленных и легко воспроизводимых экспериментов.
Именно к этому и пытаюсь Вас сподвигнуть.
Если хотите не слыть балаболом - подтверждайте свои фантазии тестовыми сценариями а-ля Том, это помогает.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017765
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymous,

гуру Том замечателен тем, что он доступен. Ему вопрос написал, получил ответ.

От "кумиров" которые уподобились тибетским монахам польза очень специфичная.
Они секреты Оракла хранят от непосвященных :)

В чем, кстати, и отличается наука от ремесла: в науке ценится прогресс, а в ремесле - секреты.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017769
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL

гуру Том замечателен тем, что он доступен. Ему вопрос написал, получил ответ.

Жаль Вас расстраивать, но ответил не Том.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017770
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
andrey_anonymous,

гуру Том замечателен тем, что он доступен. Ему вопрос написал, получил ответ.

Он зарплату за это получал. В этом, в ответах на вопросы, состояла его работа .

НеофитSQL

От "кумиров" которые уподобились тибетским монахам польза очень специфичная.
Они секреты Оракла хранят от непосвященных :)

Спички детям не игрушка, и прячут их от детей вовсе не тибетские монахи.


НеофитSQL

В чем, кстати, и отличается наука от ремесла: в науке ценится прогресс, а в ремесле - секреты.

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

А ремесло, это не про секреты в первую очередь, а про демонстрацию шедевров (masterpieces).
Так, в Нюрнберге, золотых дел мастера должны были представить серебряный кубок колумбины.
И, на основе представленного, комиссия решала, достоин ли претендент приёма в ремесленники, путём присвоения ему звания
мастера.
Между прочим, такого рода разумная традиция для всех ремесленных профессий, сорта столяра или плотника,
сохранена в Германии до сих пор.
Всякий столяр до сих пор должен представить свой шедевр, чтобы бумажку получить о том, что он столяр.

В программировании, вообще говоря нет ничего даже близко похожего.
В частности потому, что ему, как первой или главной профессии, нигде не учат.
Т.е. программисты, это по сути, скопище самозванцев.
У таких людей вообще какие могут быть секреты...
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40017799
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НеофитSQL
Как правильно развернуть pivot "своими словами",

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

        ID TITL NAME SOME
---------- ---- ---- ----
         1 head Ivan 500

SQL> ed
Wrote file afiedt.buf

  1  with tbl as
  2  (
  3   select 1 id, 0 flag, 'head' property from dual union all
  4   select 1 id, 1 flag, 'Ivan' property from dual union all
  5   select 1 id, 3 flag, '500' property from dual
  6  )
  7  select
  8     id,
  9     max(case flag when 0 then property end) title,
 10     max(case flag when 1 then property end) name,
 11     max(case flag when 3 then property end) something
 12  from
 13     tbl
 14  group by
 15*     id
SQL> /

        ID TITL NAME SOME
---------- ---- ---- ----
         1 head Ivan 500



Ещё раз, pivot - это просто удобная синтаксическая обёртка. Если понимать, что он делает, то не так уж сложно переписать эту конструкцию более "стандартными" элементами языка.
...
Рейтинг: 0 / 0
Вопрос по сортировке в таблице
    #40018030
НеофитSQL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
env,

Спасибо. С этим примером мне стало понятно.
...
Рейтинг: 0 / 0
21 сообщений из 46, страница 2 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Вопрос по сортировке в таблице
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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