|
помогите с 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 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Всем привет, нужна помощь, Помогите пожалуйста, есть таблица в таком фармате: Name | KOD | R44 | R46 | R48 | R50 | ------------------------------------------- F201 K23 3 3 4 4 Нужно преобразовать в следующий формат: Name | KOD | Size | KOL | -------------------------------- F201 K23 R44 3 F201 K23 R46 3 F201 K23 R48 4 F201 K23 R50 4 Очень прошу помогите ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 16:39 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
alexx09, Код: sql 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2017, 20:01 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
Огромное спасибо. Все оказалось так просто, ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2017, 07:01 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
guest_rusimportalexx09, Код: sql 1. 2. 3. 4. 5. 6. 7.
Нужна опять помощь, чета не получается вырабатать процесс вычисления вот что я намутил: Код: sql 1. 2. 3. 4. 5. 6. 7.
Нужно из общей суммы NKROY вычитать следующее значение размера R24, и в каждой строке NKROY будет уменьшаться на ту сумму которая прописана в каждой строке R24. Например: -R24-|-NKROY-| ------------------ --3---|----10---| --2---|-----7---| --4---|-----5---| --1---|-----1---| Вот примерно так это должно выглядеть Помогите пожалуйста решить эту проблему, заранее благодарю. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2017, 08:12 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
или точнее так будет выглядеть формула: -RAZMER-|-KOL-|-NKROY-| ---------------------------- -----24---|--3---|----10---| -----24---|--2---|-----7---| -----24---|--4---|-----5---| -----24---|--1---|-----1---| ... |
|||
:
Нравится:
Не нравится:
|
|||
16.07.2017, 08:18 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
alexx09, Лень разбираться в плохочитаемом запросе, но, возможно поможет такой подход Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
17.07.2017, 12:14 |
|
помогите с unpivot
|
|||
---|---|---|---|
#18+
alexx09или точнее так будет выглядеть формула: -RAZMER-|-KOL-|-NKROY-| ---------------------------- -----24---|--3---|----10---| -----24---|--2---|-----7---| -----24---|--4---|-----5---| -----24---|--1---|-----1---| Решение имеет место быть только , если строки пронумерованы (см. FAQ про счетчики) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2017, 07:33 |
|
|
start [/forum/topic.php?all=1&fid=45&tid=1612261]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 334ms |
total: | 492ms |
0 / 0 |