powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Почему в SQL нет DDL команды TRANSPOSE?
25 сообщений из 40, страница 1 из 2
Почему в SQL нет DDL команды TRANSPOSE?
    #36206305
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Этот вопрос не о том как транспонировать конкретную таблицу.
Мне интересен теоретический ответ о том, почему в стандарте SQL до сих пор нет просто одной команды, которая бы это делала? Есть теоретическая проблема, которая не дает написать такую функцию и встроить ее в SQL?

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

А вот так чтобы сказать
Код: plaintext
create table as ( select transpose (table_x, parameters) ) ; 
такого нигде нет.
Почему?
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206343
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Я полагаю, что бы быдлокодеры не пытались сделать транспозиорование терабайтной таблицы.

Есть же OLAP?
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206351
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cat2, придумай совершенную защиту от дурака и природа создаст еще более совершенного дурака.
Твой аргумент из области практики. Как это в теории то объяснятеся?

Ну и потом, OLAP это как известно online analytical processing. А я говорю про data definition language ddl. Т.е. вот мне для определенной цели нужна транспонированная таблица (иногда и несколько терабайт может занимать). Например для последующего статистического моделирования. Там никакого OLAP нет. В данный момент приходится практически ручками sum (case x) statements писать.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206444
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposer,

А вас не смущает например то, что у столбца есть тип данных, а у строки нет? Как будет выглядеть ваше "parameters"?
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206447
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wildwind,
Не понял проблемы. Из вполне определенной таблицы со столбцами по вполне определенному алгоритму получается другая таблица тоже со столбцами. Причем здесь тип данных строк?
И вот SAS proc transpose же написали. Это просто как пример, что вполне можно такую функцию написать и поддерживать. Тип данных в SAS тоже существует как понятие.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206452
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposer вот SAS proc transpose же написали.
Так и вы напишите. :)
Она ведь будет всего лишь генерить нужный SQL.

Почему процедура, генерирующая SQL, не встроена в синтаксис? Потому что вам нужно одно транспонирование, мне чуть другое, а кому-то сильно другое. Всего не предусмотришь.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206610
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposer пишет:
> Этот вопрос не о том как транспонировать конкретную таблицу.
> Мне интересен теоретический ответ о том, почему в стандарте SQL до сих
> пор нет просто одной команды, которая бы это делала? Есть теоретическая
> проблема, которая не дает написать такую функцию и встроить ее в SQL?

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

Для начала проблема будет с бесконечной мощностью множества записей и
конечностью множества атрибутов. Конечное множество неравномощно бесконечному,
оно не может отображаться в бесконечное однозначно. Грубо говоря, бесконечное
число строк в конечное число столбцов не запихать.

Ну и вообще, операция бессмысленная.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206679
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivНу и вообще, операция бессмысленная
Козьма Петрович ПрутковНекоторые вещи нам непонятны не потому, что наши понятия слабы, а потому, что сии вещи не входят в круг наших понятий
Операция осмысленная и приносит конкретные результаты в виде таблицы. Так же как и create as select. Она вообще является подмножеством select.

Конечное множество не равномощно бесконечному, но на то и существуют отображения множеств, в народе называемые функциями. Вот документации реализации такой функции proc transpose в SAS
http://analytics.ncsu.edu/sesug/2005/TU12_05.PDF
Почему ее не включают в SQL?

Ну и вообще любая функция базы данных в реальности действует на ограниченном множестве параметров и значений, так как место на диске ограничено. В нашем случае число distinct значений в колонке, которые должны стать именами новых колонок должно быть ограничено.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206680
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wildwind,

ну вот для SAS написали и стандартизировали. Почему не стандартизировать и в SQL?
При транспонировании нужно не так уж много разнообразных стратегий. В Teradata есть даже графическая утилитка, которая такие SQL пишет, вот взять бы ее (в текстовом формате) и принять в стандарт.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36206682
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати вот пример еще такой неочевидной функции: "connect by".
Она только относительно недавно появилась в стандарте, как я помню
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36207109
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposer wrote:

> Операция осмысленная и приносит конкретные результаты в виде таблицы.
> Так же как и create as select. Она вообще является подмножеством select.
>
> Конечное множество не равномощно бесконечному, но на то и существуют
> отображения множеств, в народе называемые функциями.

Я же написал и по-простому тоже. Нельзя создать таблицу с
потенциально бесконечным числом столбцов. Конечно, в конкретной
таблице кол-во строк конечное. Но оно может быть например 100 000.
В современных СУБД кол-во полей обычно ограничено, и ограничения
эти -- 100-200 полей. Так что тупо не влезет.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36207153
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv,

странный разговор получается, я вам говорю, да вы и не отрицаете, что есть конкретные реализации задачи транспонирования. А в следующем предложении вы говорите, что это невозможно и не нужно.

Может осталось незамеченным, что при транспонировании происходит агрегация по distinct value из первой колонки?
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36207553
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposer wrote:

> странный разговор получается, я вам говорю, да вы и не отрицаете, что
> есть конкретные реализации задачи транспонирования. А в следующем
> предложении вы говорите, что это невозможно и не нужно.
>
> Может осталось незамеченным, что при транспонировании происходит
> агрегация по distinct value из первой колонки?

Дык ты же не определил операцию транспонирования чётко.
Определи -- поговорим.

Но, думаю, что ничего от наличия distinct -а не изменится.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36207790
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposerПочему?Я думаю, что каждый из здесь присутствующих сможет привести пример операции, которую приходилось делать, но которая не имеет специально команды в стандарте SQL. И, по моим ощущениям, транспонирование таблицы отнюдь не самая частая из таких операций (хотя у Вас могут быть другие ощущения). Но судя по тому, что еще ни один из производителей СУБД не реализовал у себя такой команды, в стандарт ей явно рановато.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36208081
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bogdanov Andrey,

Кстати, было бы интересно узнать, какие еще такие "полустандартные" паттерны приходится часто кодировать? Но такие, чтобы были с претензией на фундаментальность.

Из того, чего раньше не было, я вспоминаю natural join (oracle) и width_bucket (teradata).
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36208141
wildwind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov Andreyеще ни один из производителей СУБД не реализовал у себя такой команды
Это не так. Microsoft издавна любит сводные таблицы (за что его любит офисный пользователь, воспитанный на Экселе), поэтому в Access есть TRANSFORM, а в SQL Server есть PIVOT.

Bogdanov Andreyв стандарт ей явно рановато.
С этим можно согласиться.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36208534
Bogdanov Andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposerКстати, было бы интересно узнать, какие еще такие "полустандартные" паттерны приходится часто кодировать? Но такие, чтобы были с претензией на фундаментальность.Ну не знаю насчет фундаментальности. Я вот ни разу в жизни не испытал потребности в транспонировании. По-моему, так совершенно ненужная штука и уж точно ничего фундаментального из себя не представляющая. А вот органичение на "непересекаемость" интервалов мне нужно регулярно. Почему такого ограничения нет в стандарте SQL?
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36213778
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bogdanov AndreyЯ вот ни разу в жизни не испытал потребности в транспонировании. По-моему, так совершенно ненужная штука и уж точно ничего фундаментального из себя не представляющая.
Она просто не серверная. Это клиентская операция, операция представления данных. На сервер её тянут только из-за однозвенного мышления.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36249246
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
softwarerBogdanov AndreyЯ вот ни разу в жизни не испытал потребности в транспонировании. По-моему, так совершенно ненужная штука и уж точно ничего фундаментального из себя не представляющая.
Она просто не серверная. Это клиентская операция, операция представления данных. На сервер её тянут только из-за однозвенного мышления.
в моем мире сервер занимается тем, что нужно больше одного раза или требует ресурсов недоступных на клиенте.

На клиенте ресурсы выбираются с точки зрения баланса цены X клиентов и цены этих ресурсов на сервере плюс пропускная способности сети, взвешенных по частоте использования и пиковой нагрузке. Ну и клиент это обычно обычный PC или laptop и у них есть еще свои ограничения в том числе и в образованности техсуппорта.

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

transposer или требует ресурсов недоступных на клиенте.
В вашем мире на серверах стоит специальный транспонирующий процессор?

transposerНа клиенте ресурсы выбираются с точки зрения баланса цены X клиентов и цены этих ресурсов на сервере плюс пропускная способности сети, взвешенных по частоте использования и пиковой нагрузке.
Тяжело, но в целом верно.

transposerНу и клиент это обычно обычный PC или laptop и у них есть еще свои ограничения
Безусловно. Максимум, что этот клиент потянет - ворд, фотошоп или там какая квака. Транспонирование таблицы ему не по зубам.

transposer в том числе и в образованности техсуппорта.
И техсаппорт, безусловно, не в силах адекватно ухаживать за железом, способным на столь сложные операции.

transposerТак что транспонирование таблиц происходит в основном на сервере, на клиенте либо сеть не позволит,
Надо же, какая умная и капризная сеть. А стихи Вознесенского она тоже не пропускает?

transposerлибо частота использования сделает бессмысленным.
Кэширование результата (транспонированной таблицы) - единственное, что носит хотя бы следы смысла в присутствии на сервере. Но я бы не ожидал увидеть задачу, где такое кэширование даёт реальный выигрыш.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36251809
Денис Ильин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PIVOT-а конечно в стандарте нету, но оно таки влезет в конце концов.
вот кстати, ещё MERGE тоже напрашивается, уж не знаю, есть ли он там..
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #36252351
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer+100
Добавлю, что клиентское ПО (в отличие от серверного) можно написать так, чтобы физическое транспонирование (т.е. перемещение данных в памяти) вообще было не нужно. Например, если выборка содержится в двумерном массиве (или любой другой структуре, значения из которой можно прочитать, указав два индекса), то достаточно будет при обращении к этому массиву поменять местами индексы.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Почему в SQL нет DDL команды TRANSPOSE?
    #37174255
Фотография dbms_photoshop
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
transposerПочему не стандартизировать и в SQL ?Потому что в стандарте SQL еще на этапе parse должно быть известно число столбцов. Соответственно транспонировать в заранее неизвестное число столбцов без динамической генерации запроса - невозможно. Тем не менее у Oracle есть возможность сделать нечто подобное путем использования pivot xml. Вот только подумай надо оно тебе? Это может быть полезно для возврата на клиент ну никак не для создания таблицы.
transposerКстати вот пример еще такой неочевидной функции: "connect by".
Она только относительно недавно появилась в стандарте, как я помнюТебе редко в жизни попадаются древовидные данные?
Оператор connect by появился а Oracle со второй версии в 1979 году. Лично мне более удивительно почему CTE в MSSQL появились только с 2005.
А стандарт - это не более чем рекомендации к реализации того или иного функционала. Каждый разработчик СУБД реализует свое видение стандарта.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Почему в SQL нет DDL команды TRANSPOSE?
    #37732512
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
dbms_photoshop,

я пока втыкаю в ответы предыдущих ораторов. Но в вопросе создания транспонированной таблицы ответ простой, такие таблицы нужны для разных злых data mining или аналитических тулзов. Просто если ты хочешь промоделировать y~(x1,x2,x3....x100), а эти иксы хранятся в нормализованной табличке, приходится писать дурацкие case when then end.
...
Рейтинг: 0 / 0
Почему в SQL нет DDL команды TRANSPOSE?
    #37732516
transposer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и кстати, чтобы два раза не вставать. Может я чего так и не понял за два года, но case when по прежнему мой лучший друг. достало.
...
Рейтинг: 0 / 0
25 сообщений из 40, страница 1 из 2
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Почему в SQL нет DDL команды TRANSPOSE?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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