powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Почему в SQL нет DDL команды TRANSPOSE?
15 сообщений из 40, страница 2 из 2
Почему в SQL нет DDL команды TRANSPOSE?
    #37732873
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposerи кстати, чтобы два раза не вставать. Может я чего так и не понял за два года, но case when по прежнему мой лучший друг. достало.Если внимательней читать - можно увидеть слово pivot.
В Oracle и MSSQL оно есть.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37733224
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposerМне интересен теоретический ответ о том, почему в стандарте SQL до сих пор нет просто одной команды, которая бы это делала?


Потому что SQL работает с таблицами, а не с матрицами. Это совсем не одно и то же.
Если интересно, в чём разница, найди сам определение математической матрицы и реляционной таблицы.

Дам подсказку: кол-во столбцов в таблице всегда конечно и фиксировано во время жизни этой таблицы.
Кол-во строк таблицы не ограничено, и может потенциально быть бесконечно большим.

transposerЕсть теоретическая проблема, которая не дает написать такую функцию и встроить ее в SQL?


Да, есть. Люди, пишущие на SQL работают с реляционными данными, а не с матрицами, такие операции
им просто ни на фиг не нужны. Ну и они теоретически не могут быть реализованы.

transposerВ SAS есть proc transpose; в разных программах типа Teradata Miner есть модули, которые пишут SQL для этого; на форуме тоже можно найти разные скрипты.

А вот так чтобы сказать
Код: sql
1.
create table as ( select transpose (table_x, parameters) ) ; 

такого нигде нет.
Почему?

Почему такое невозможно в SQL я уже написал. Почему такие функции есть во всяких OLAP-средствах -- потому что 95 процентов людей идиоты, и им не объяснить, что эту операцию невозможно реализовать на реляционной таблице, потому что они как привыкли работать в своём долбанутом Excel-е, так и думают, что с таблицей можно делать то же самое.
И этим идиотам не вдолбить в их башку, что эта операция им не нужна и что на самом деле они хотят распечатать красивый отчёт, и в общем-то по горизонтали его смотреть или по вертикали -- один хрен.
А конкуренция заставляет производителей реализовывать такие вещи, потому что просто если они это не сделают, то эти бараны у них не купят их продукт.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37733227
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блин, купился на некропостинг.

Модераторы, удалите пож.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37733229
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> и кстати, чтобы два раза не вставать. Может я чего так и не понял за два года,
> но case when по прежнему мой лучший друг. достало.

А, всё-таки мой пост будет полезен, раз он за 2 года так ничего и не понял.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37733233
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> и кстати, чтобы два раза не вставать. Может я чего так и не понял за два года,
> но case when по прежнему мой лучший друг. достало.

Да, ещё на счёт теории.

Если ты транспонируешь таблицу, несколько значений одной колонки из разных строк
становятся значениями разных колонок одной строки. Получающаяся
таблица нарушает 1ую нормальную форму рел. таблицы.
Далее все вытекающие.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37734641
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivПочему такое невозможно в SQL я уже написал. Почему такие функции есть во всяких OLAP-средствах -- потому что 95 процентов людей идиоты, и им не объяснить, что эту операцию невозможно реализовать на реляционной таблице, потому что они как привыкли работать в своём долбанутом Excel-е, так и думают, что с таблицей можно делать то же самое.
И этим идиотам не вдолбить в их башку, что эта операция им не нужна и что на самом деле они хотят распечатать красивый отчёт, и в общем-то по горизонтали его смотреть или по вертикали -- один хрен.
А конкуренция заставляет производителей реализовывать такие вещи, потому что просто если они это не сделают, то эти бараны у них не купят их продукт.Транспонивароть с известным числом столбцов позволяет pivot.
С неизвестным - pivot for xml in Oracle, как я уже сказал.
Если хочется полной гибкости - ODCITable .
Да, в SQL на этапе parse должно быть известно число столбцов, но ты не поверишь, в реальной жизни огромное число случаев когда пользователям есть смысл видеть данные по двум осям. Это я не к тому, что есть реальный смысл именно в транспонировании, а к тому, что на SQL все возможно при желании и видеть здесь твой бред про идиотов написанный в таком безапелляционном тоне несколько смешно.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37734871
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopДа, в SQL на этапе parse должно быть известно число столбцов, но ты не поверишь, в реальной жизни огромное число случаев когда пользователям есть смысл видеть данные по двум осям.
Это не означает, что SQL должен возвращать выборку по двум осям. Равно как "огромное число случаев когда пользователям есть смысл видеть график", но это не означает, что SQL должен возвращать картинку этого графика.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37734909
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerdbms_photoshopДа, в SQL на этапе parse должно быть известно число столбцов, но ты не поверишь, в реальной жизни огромное число случаев когда пользователям есть смысл видеть данные по двум осям.
Это не означает, что SQL должен возвращать выборку по двум осям.Я с этим и не спорил.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37734991
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> в реальной жизни огромное число случаев когда пользователям есть смысл видеть
> данные по двум осям. Это я не к тому, что есть реальный смысл именно в
> транспонировании, а к тому, что на SQL все возможно при желании и видеть здесь

Это всё не SQL уже.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37735111
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
> в реальной жизни огромное число случаев когда пользователям есть смысл видеть
> данные по двум осям. Это я не к тому, что есть реальный смысл именно в
> транспонировании, а к тому, что на SQL все возможно при желании и видеть здесь

Это всё не SQL уже.
Пожалуй тоже соглашусь. Это дело "отображающего" средства.
Хотя и можно придумать случай, когда на веб страничке надо отобразить данные по двум осям и логику выносить из базы по некоторым причинам нецелесообразно.
З.Ы. Просто не надо было так про ОЛАП и эксель.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37735114
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dbms_photoshopХотя и можно придумать случай, когда на веб страничке надо отобразить данные по двум осям и логику выносить из базы по некоторым причинам нецелесообразно.
dbms_xplan.display() :)
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37735141
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerdbms_photoshopХотя и можно придумать случай, когда на веб страничке надо отобразить данные по двум осям и логику выносить из базы по некоторым причинам нецелесообразно.
dbms_xplan.display() :)Не понял намека.
dbms_xplan.display() возвращает коллекцию dbms_xplan_type который собой представляет
Код: sql
1.
dbms_xplan_type as object (plan_table_output varchar2(300))

То есть, несколько колонок склеены в одну. Не вижу здесь горизонтальной оси.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37735174
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Пожалуй тоже соглашусь. Это дело "отображающего" средства.
> Хотя и можно придумать случай, когда на веб страничке надо отобразить данные по
> двум осям и логику выносить из базы по некоторым причинам нецелесообразно.

Это -- типичная логика представления данных. В БД ей делать нечего.
Это ещё можно реализовать на среднем слое, на всяких там Java, PHP,
а ещё лучше -- на клиенте, напр. на JS.

> З.Ы. Просто не надо было так про ОЛАП и эксель.

Надо, надо.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37735178
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> То есть, несколько колонок склеены в одну. Не вижу здесь горизонтальной оси.

А какая им разница, как 1НФ нарушать, так или эдак ?
Давай, лепи всё в строку, а на клиенте -- парсить строку и разбирать по колонкам...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37735220
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv> З.Ы. Просто не надо было так про ОЛАП и эксель.

Надо, надо.Ага, спасибо. Этот комент говорит о высоком профессионализме и знании в ОЛАП.

З.Ы. Я предпочитаю не лепить с последующим распарсиванием, если этого можно вменяемыми средствами избежать.
Одно дело если источник данных SSAS, другое если Oracle, третье если Access.
...
Рейтинг: 0 / 0
15 сообщений из 40, страница 2 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Почему в SQL нет DDL команды TRANSPOSE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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