|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Не могу разобратся с этой функцией. Есть вот такая таблица: code model speed ram hd cd price 12 1233 800 128 20.0 50x 970.0000 Необходимо перевернуть данные, чтобы они были вот в таком формате: chr value cd 50x hd 20 model 1233 price 970.00 ram 128 speed 800 Думаю, что это делается с помощью функции UNPIVOT. Спасибо большое за помощь, по возможности сделайте примичания! ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2009, 12:19 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Если Вам нужен только результат сделайте это в Excel (специальная вставка-транспонировать) ??? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2009, 12:23 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Спасибо, в ексель я знаю как это сделать :), но мне надо в sql (учусь!) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.04.2009, 12:25 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_G Думаю, что это делается с помощью функции UNPIVOT. в JET нет UNPIVOT Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
(одно - зарезервированное слово, другое - функция ВБА) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 10:00 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Хм, подобные вопросы на форуме появляются с завидной регулярностью. За последний месяц - как минимум один раз в неделю. Если количество столбцов постоянно и их название не меняется, то ответ qwrqwr решит вашу проблему. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 11:51 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
AlexBessonovЕсли количество столбцов постоянно и их название не меняется, то ответ qwrqwr решит вашу проблему. При переменном количестве полей разумно делать динамический запрос: пробежаться по коллеции Fields, опрашивать название поля и вставлять очередной блок Union. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 11:58 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Спасибо большое за пример в АССESS. Подскажите, а в SQL не JET, кто-нибудь поможет ? Вот так я сделал для одного поля: SELECT haract, znach FROM (SELECT speed FROM laptop WHERE code = (SELECT max(code) FROM laptop)) as p UNPIVOT (znach FOR haract IN (speed)) as unpvt НО... если я добавляю больше одного поля (speed, model, hd и т.д.), возникает следующая ошибка: "The type of column "model" conflicts with the type of other columns specified in the UNPIVOT list" - какая-то ошибка типов... в чем может быть проблема? Вот код, который вызывает ошибку: ELECT haract, znach FROM (SELECT speed, model, hd FROM laptop WHERE code = (SELECT max(code) FROM laptop)) as p UNPIVOT (znach FOR haract IN (speed, model, hd)) as unpvt ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 14:06 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_G, поиск по форуму и вот один из примеров: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
Пробуйте и разбирайтесь!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 14:28 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Вот с этого примера и разбирался, но все равно получилось только на половину:) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 14:35 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_GСпасибо большое за пример в АССESS. Подскажите, а в SQL не JET, кто-нибудь поможет ? Вот так я сделал для одного поля: SELECT haract, znach FROM (SELECT speed FROM laptop WHERE code = (SELECT max(code) FROM laptop)) as p UNPIVOT (znach FOR haract IN (speed)) as unpvt НО... если я добавляю больше одного поля (speed, model, hd и т.д.), возникает следующая ошибка: "The type of column "model" conflicts with the type of other columns specified in the UNPIVOT list" - какая-то ошибка типов... в чем может быть проблема? Так пишет же проблему. Вы значения из нескольких столбцов РАЗНОГО ТИПА сливаете в один - т.е. ОДНОГО ТИПА - оно и не знает какой из предложенных входных типов сделать результирующим. Подумайте за него, попробуйте предварительно (подзапросом) поля исходной таблицы привести к единому типу (функциями конвертации типов данных вашего НЕ-JET-SQL'я) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 14:37 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
непоймучка Спасибо за подсказку, я так в принципе и думал. Сейчас буду думать... отпишусь :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 14:40 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Решил. Вот решение, и тоже работает через union. SELECT chr, val FROM (SELECT cast(model as varchar(50)) as model, CAST(speed as varchar(50)) AS speed, CAST(ram as varchar(50)) AS ram, cast(hd as varchar(50)) AS hd , cast(cd as varchar(50)) as cd , cast(price as varchar(50)) AS price FROM PC WHERE code =(select MAX(code) from PC) ) p UNPIVOT (val FOR chr IN (model, speed, ram, hd, cd, price))AS unpvt Единственный вопрос, зачем для типа данных varchar указывать длинну? Он же типа variance char -то есть любая (до 255) или я ошибаюсь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 15:45 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
AlexBessonovХм, подобные вопросы на форуме появляются с завидной регулярностью. За последний месяц - как минимум один раз в неделю. Если количество столбцов постоянно и их название не меняется, то ответ qwrqwr решит вашу проблему. Между прочим, я эту задачу каждый раз для себя заново решаю. Ну не так легко для понимания. Как можно значения полей сделать названиями новых полей? Нетривиально это. Руками SQL вообще боюсь трогать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 16:34 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Подскажите, как вывести значение с точностью до 2х знаков ? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 17:00 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_GПодскажите, как вывести значение с точностью до 2х знаков ? Как вариант можно воспользоваться вот такой простенькой функцией: Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 17:04 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Спасибо, но я пробую в ANSI SQL, там нет VBA. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 17:10 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Не могу найти как в Access преобразовывать данные ? CAST (поле1 AS (ТИП ДАННЫХ)) - так в ANSI... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 17:18 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_Gкак в Access преобразовывать данные ? в Access - обычно, с помощью ВБА (CInt, CDbl и т.п.) в 'голом' JET - практически никак (судя по справке, поддерживается подмножество скалярных функций, определенных через ODBC и, в том числе, CONVERT), но все это хозяйство, вроде, работает только после подключения к Джету извне через ОДБЦ (в обычном запросе не заработает точно) Дело в том, что SQL в JET (в Access) очень-очень урезанный (например, нет даже CASE) Обычно это компенсируется VBA-шными функциями (CASE - IIfом ; COALESCE - Nz и т.п.) Потому что Джет работает почти всегда "бок о бок" с Access и с VBA соответственно При попытке сделать из JETа хранилище данных - и обращаться к нему, например, через OLE DB провайдера - Вы будете очень сильно ограничены доступным синтаксисом JET-SQL А что Вам нужно - не очень понятно: то Вам нужно в ANSI-SQL, то в Access Вы расскажите поконкретнее... ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 17:43 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Дело в том, что я решаю задачи на sql-ex.ru (ansi sql) и паралельло работаю в access (jet sql), а пользуюсь одним форумом. На данном этапе, задача стоит следующая: "... Получить результат с точностью до 2-х десятичных знаков"... я уже пробывал и так - SELECT CAST(AVG(cast(numguns as numeric(6,2)) AS NUMERIC(6,2))) FROM classes - результат ошибка, и так - SELECT CAST(avg(numguns*1.0) as numeric(3,2)) as avg FROM classes - результат 9.00. А надо - 9.67 ... Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 18:04 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Все - разобрался! Вот этот работает: SELECT CAST(AVG(cast(numguns as numeric(6,2)) AS NUMERIC(6,2))) FROM classes . Хотя я все равно не пойму, почему при использовании avg(numguns) без cast при выводе программа отсекает дробную часть автоматически??? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 18:28 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
И предыдущие работает... туплю... скобки... :) ... |
|||
:
Нравится:
Не нравится:
|
|||
14.04.2009, 18:36 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_G, SELECT CAST(AVG(numGuns*1.0) as NUMERIC(6,2)) FROM Classes Where type = 'bb' вот - у меня так заработало))) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.04.2009, 00:37 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
AlexBessonovХм, подобные вопросы на форуме появляются с завидной регулярностью. За последний месяц - как минимум один раз в неделю. Это потому, что это упражнение с сайта онлайн обучения/сертификации sql :) Автор не постеснялся сюда пример один в один выложить. Ну да ладно, и мне разобраться помогли, ошибка была из-за того, что MSSQL затруднялся дать имя колонке при преобразовании типов: cast(price as varchar) нужно было ее просто явно проименовать: cast(price as varchar) as price Хотя в мозгах этот unpivot все равно не отложился, не уверен, что смогу повторить без мурзилки... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.04.2010, 23:42 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
MaximuS_GРешил. Вот решение, и тоже работает через union. SELECT chr, val FROM (SELECT cast(model as varchar(50)) as model, CAST(speed as varchar(50)) AS speed, CAST(ram as varchar(50)) AS ram, cast(hd as varchar(50)) AS hd , cast(cd as varchar(50)) as cd , cast(price as varchar(50)) AS price FROM PC WHERE code =(select MAX(code) from PC) ) p Подскажите где почитать или объясните зачем в конце ставить любую букву, в Вашем случае "р" и почему при преобразовании без явного указания имя (AS speed и т.д.) запрос не будет работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
21.12.2016, 14:49 |
|
|
start [/forum/topic.php?fid=45&msg=35931202&tid=1612261]: |
0ms |
get settings: |
11ms |
get forum list: |
10ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
4ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 152ms |
0 / 0 |