Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 unpivot отключить сортировку  [new]
Дева Мария
Guest
поискала в разных источниках, но не нашла, как справиться с сортировкой в unpivot по имени колонки с селекта.

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

пример :
select row_number() over(order by fio) row_num, fio, column_name, numb
  from (select 'dfvgfv' fio,
               8 number2,
               1 number1,               
               4 number4,
               5 number5,
               9 number3
          from dual) unpivot /*INCLUDE NULLS*/ EXCLUDE NULLS (numb for column_name in(number1,
                                                     number2,
                                                     number3,
                                                     number4,
                                                     number5)) test_unpivot


результат:
ROW_NUM	FIO	    COLUMN_NAME	NUMB
1 dfvgfv NUMBER1 1
2 dfvgfм NUMBER2 8
3 dfvgfv NUMBER5 5
4 dfvgfv NUMBER4 4
5 dfvgfv NUMBER3 9

то есть, видно, что результат упорядочен по column_name. Хотя я этого не желаю
19 мар 18, 14:18    [21267832]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Elic
Member

Откуда:
Сообщений: 29979
Дева Мария
Хотя я этого не желаю
Пожелания сортировки оформляются в виде ORDER BY.
19 мар 18, 14:22    [21267854]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
шК0ДЕР
Member

Откуда: Издалека долго
Сообщений: 1206
Дева Мария
то есть, видно, что результат упорядочен по column_name

Не верь глазам
Если нет указания как сортировать, то и нет сортировки
19 мар 18, 14:30    [21267901]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Дева Мария
Guest
шК0ДЕР
Дева Мария
то есть, видно, что результат упорядочен по column_name

Не верь глазам
Если нет указания как сортировать, то и нет сортировки


воистину..

все дело в row_number

если его убрать - все хорошо
19 мар 18, 14:42    [21267980]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Dshedoo
Member

Откуда:
Сообщений: 393
order by dbms_random.value
19 мар 18, 14:43    [21267982]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
Дева Мария,

SQL> select row_number() over(order by fio) row_num, fio, column_name, numb
  2    from (select 'dfvgfv' fio,
  3                 8 number2,
  4                 1 number1,
  5                 4 number4,
  6                 5 number5,
  7                 9 number3
  8            from dual) unpivot /*INCLUDE NULLS*/ EXCLUDE NULLS (numb for column_name in(number2,
  9                                                       number1,
 10                                                       number4,
 11                                                       number5,
 12                                                       number3)) test_unpivot
 13  /

   ROW_NUM FIO    COLUMN_       NUMB
---------- ------ ------- ----------
         1 dfvgfv NUMBER2          8
         2 dfvgfv NUMBER1          1
         3 dfvgfv NUMBER3          9
         4 dfvgfv NUMBER5          5
         5 dfvgfv NUMBER4          4


без гарантій

.....
stax
19 мар 18, 14:50    [21268033]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
merch
Member

Откуда:
Сообщений: 170
Дева Мария
том порядке, в каком задаю в селекте ?



select  row_number() over(order by fio) row_num, fio, column_name, numb
  from (select 'dfvgfv' fio,
               8 number2,
               1 number1,               
               4 number4,
               5 number5,
               9 number3
          from dual) unpivot /*INCLUDE NULLS*/ EXCLUDE NULLS (numb for column_name in(number1,
                                                     number2,
                                                     number3,
                                                     number4,
                                                     number5)) test_unpivot
order by decode(column_name, 'NUMBER2', 1, 'NUMBER1', 2, 'NUMBER4', 3, 'NUMBER5', 4, 'NUMBER4', 5)
19 мар 18, 14:57    [21268068]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
merch
Member

Откуда:
Сообщений: 170
немного ошибся в сообщении выше.
19 мар 18, 14:59    [21268079]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
Дева Мария,

с гарантіей
SQL> ed
Wrote file afiedt.buf

  1  select row_number() over(order by fio,column_name) row_num, fio, column_name, numb
  2    from (select 'dfvgfv' fio,
  3                 8 number2,
  4                 1 number1,
  5                 4 number4,
  6                 5 number5,
  7                 9 number3
  8            from dual) unpivot /*INCLUDE NULLS*/ EXCLUDE NULLS (numb for column_name in(number1 as 'p2',
  9                                                       number2 as 'p1',
 10                                                       number3 as 'p5',
 11                                                       number4 as 'p3',
 12                                                       number5 as 'p4')) test_unpivot
 13* order by fio,column_name
SQL> /

   ROW_NUM FIO    CO       NUMB
---------- ------ -- ----------
         1 dfvgfv p1          8
         2 dfvgfv p2          1
         3 dfvgfv p3          4
         4 dfvgfv p4          5
         5 dfvgfv p5          9


.....
stax
19 мар 18, 15:08    [21268115]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Дева Мария
Guest
мне нужно с гарантией именно в том порядке, в каком я укажу.

не нужна автоматическая сортировка совсем. Потому что в ФТ нет никакого признака сортировки, но поля должны идти в строгом порядке, установленным кем-то свыше , но ни по какому признаку не отсортированному
19 мар 18, 16:03    [21268498]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
шК0ДЕР
Member

Откуда: Издалека долго
Сообщений: 1206
Дева Мария
в ФТ нет никакого признака сортировки, но поля должны идти в строгом порядке, установленным кем-то свыше

Увы, так не получится.
Как вариант, заведите в таблице поле, куда будет вставляться значение для сортировки и по нему сортируйте итоговую выборку
19 мар 18, 16:10    [21268557]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
-2-
Member

Откуда:
Сообщений: 15330
... unpivot( numb for (column_name, порядок) in (number1 as ('number1', 1), .... ))
order by порядок.
19 мар 18, 16:22    [21268649]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
Дева Мария
мне нужно с гарантией именно в том порядке, в каком я укажу.

не нужна автоматическая сортировка совсем. Потому что в ФТ нет никакого признака сортировки, но поля должны идти в строгом порядке, установленным кем-то свыше , но ни по какому признаку не отсортированному

порядок полей установлен где? таблице,вью,операторе?

......
stax
19 мар 18, 16:25    [21268673]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Ищешь непорочное зачатие? Ну нет в твоем cелекте указания в каком порядкe возврaщать строки - посему Oracle как хочет так и возвращает. А ФТ это пройтись по всем строкам таблицы а в каком порядке это дело Oracle - хоть в шахматом. В данном случае Oracle cортировал для вычисления ROW_NUMBER ну и вернул в том-жe порядке. Кстaти, аналитика выполняется (про оптимизацию в некоторых случаях - это отдельно) после того как все cтроки пофетчены так-что ФТ или нет тут побоку. Вcе пудели cобаки но не вcе cобаки пудели. Если ORDER BY нe задан не значит результат вернeтся неотcортированным. ORDER BY нe задан означает результат может врнуться в любом порядке.

SY.

Сообщение было отредактировано: 19 мар 18, 16:31
19 мар 18, 16:30    [21268709]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Дева Мария
Guest
SY
Ищешь непорочное зачатие? Ну нет в твоем cелекте указания в каком порядкe возврaщать строки - посему Oracle как хочет так и возвращает. А ФТ это пройтись по всем строкам таблицы а в каком порядке это дело Oracle - хоть в шахматом. В данном случае Oracle cортировал для вычисления ROW_NUMBER ну и вернул в том-жe порядке. Кстaти, аналитика выполняется (про оптимизацию в некоторых случаях - это отдельно) после того как все cтроки пофетчены так-что ФТ или нет тут побоку. Вcе пудели cобаки но не вcе cобаки пудели. Если ORDER BY нe задан не значит результат вернeтся неотcортированным. ORDER BY нe задан означает результат может врнуться в любом порядке.

SY.


эх :(

а вот когда убрала row_number и без явной сортировки order by- много раз протестила- все возвернулось как нужно.

Но правильно я поняла, что это не гарантированный результат, и однажды может переклинить и вернуться как попало ?
19 мар 18, 16:48    [21268852]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Дева Мария
Guest
Stax
Дева Мария
мне нужно с гарантией именно в том порядке, в каком я укажу.

не нужна автоматическая сортировка совсем. Потому что в ФТ нет никакого признака сортировки, но поля должны идти в строгом порядке, установленным кем-то свыше , но ни по какому признаку не отсортированному

порядок полей установлен где? таблице,вью,операторе?

......
stax


на бумажке в ТЗ. Больше нигде
19 мар 18, 16:49    [21268861]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Elic
Member

Откуда:
Сообщений: 29979
Дева Мария
на бумажке в ТЗ. Больше нигде
Ну так конспектируй её так: 21268068
19 мар 18, 16:58    [21268930]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10045
Дева Мария
Но правильно я поняла, что это не гарантированный результат, и однажды может переклинить и вернуться как попало ?


Правильно. Только ORDER BY (ну и ORDER SIBLINGS BY + DEPTH/WIDTH в иерaрхии/рекурсии) гарантируют порядок.

SY.
19 мар 18, 17:00    [21268944]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Дева Мария
Guest
Elic
Дева Мария
на бумажке в ТЗ. Больше нигде
Ну так конспектируй её так: 21268068


39 полей :) 39 строчек говнокода в лоб :)

перенесли контроль сбора значений в нужном порядке в другом место, сняли эту отвественность с селекта :)


всем спасибо!
19 мар 18, 17:11    [21269004]     Ответить | Цитировать Сообщить модератору
 Re: unpivot отключить сортировку  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 2787
Дева Мария
на бумажке в ТЗ. Больше нигде

Селект на основании ТЗ,
вбивайте сортировку в код и не мучайтесь (в коментар номер, дату, автора ... ТЗ)
поменяется ТЗ, поменяете сортировку в операторе

на всяк случай скан ТЗ сохраните

.....
stax
19 мар 18, 17:13    [21269016]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить