SQL - PIVOT
От: TheAteist  
Дата: 16.08.06 07:32
Оценка:
Есть таблица которая сожержит 4 колонок(колонка 1, колонка 2, колонка 3, колонка 4).
Как можно написать на SQL код чтоб он возвратил таблицу в следущем ввиде

Имееться таблица:

|колонка 1|колонка 2|колонка 3|колонка 4|
|---------|---------|---------|---------|
| 1111 |01/01/06 |aaaa | |
| 2222 |02/02/06 |bbbb | |
| 3333 |03/03/06 |ssss | |
| 4444 |04/04/06 |dddd | |

Результат должен быть следующим:

|колонка1|01/01/06|02/02/06|03/03/06|04/04/06|
|--------|--------|--------|--------|--------|
| 1111 | aaaa | | | |
| 2222 | | bbbb | | |
| 3333 | | | cccc | |
| 4444 | | | | dddd |

Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.
Буде очень блогадарен если поможете мне.
Если есть другой способ тоже буду рад.

Спасибо.
Re: SQL - PIVOT
От: Elena_ Россия  
Дата: 16.08.06 07:59
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


PIVOT — это не стандарт SQL

Если Access, то см. TRANSFORM

Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы

HOW TO: Rotate a Table in SQL Server Q175574

Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel
просто для данных на листе Excel

В общем, лучше бы уточнить задачу
Пользователь — друг программиста!
Re[2]: SQL - PIVOT
От: DarkSid Россия  
Дата: 16.08.06 08:56
Оценка:
Здравствуйте, Elena_, Вы писали:

E_>Здравствуйте, TheAteist, Вы писали:


TA>>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


E_>PIVOT — это не стандарт SQL


E_>Если Access, то см. TRANSFORM


E_>Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы


E_>HOW TO: Rotate a Table in SQL Server Q175574


E_>Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel

E_>просто для данных на листе Excel

E_>В общем, лучше бы уточнить задачу


В MS SQL 2005 Команда Pivot имеется см.здесь
Автор: А. Каленик
Дата: 14.08.06

для SQL servers 2000 см.здесь
Re[2]: SQL - PIVOT
От: TheAteist  
Дата: 16.08.06 17:36
Оценка:
Здравствуйте, Elena_, Вы писали:

E_>Здравствуйте, TheAteist, Вы писали:


TA>>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


E_>PIVOT — это не стандарт SQL


E_>Если Access, то см. TRANSFORM


E_>Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы


E_>HOW TO: Rotate a Table in SQL Server Q175574


E_>Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel

E_>просто для данных на листе Excel

E_>В общем, лучше бы уточнить задачу


Имееться таблица:

|колонка 1|колонка 2|колонка 3|
|-------------|-------------|-------------|
| 1111111 | 01/01/06 |AAAAAAAA|
| 2222222 | 02/02/06 |BBBBBBBB|
| 3333333 | 03/03/06 |CCCCCCC|
| 4444444 | 04/04/06 |DDDDDDD|

Как можно написать на SQL код чтоб он возвратил таблицу в следущем ввиде

|колонка1|01/01/06|02/02/06|03/03/06|04/04/06|
|------------|------------|------------|------------|------------|
| 1111111| AAAAAAA| nuuuuull| nuuuuull | nuuuuull|
| 2222222| nuuuuull| BBBBBBB| nuuuuull | nuuuuull|
| 3333333| nuuuuull| nuuuuull| CCCCCC | nuuuuull |
| 4444444| nuuuuull| nuuuuull| nuuuuuull| DDDDDD|

*там где написанно 'nuuuuuull' то в том месте должно быть пусто

Как можно это сделать с помощью PIVOT
Если есть другой способ тоже буду рад.
Буде очень блогадарен если поможете мне.

Я к тому же просмотрел следующую ссылку http://www.sql.ru/faq/faq_topic.aspx?fid=358
но он пишет что проблема с pivot в этих строках
SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot
DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot
помогите пожалуйста. и разве не надо заменить ##pivot на свое имя?

СПАСИБО заранее.
Re[3]: SQL - PIVOT
От: DarkSid Россия  
Дата: 16.08.06 18:43
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Здравствуйте, Elena_, Вы писали:


E_>>Здравствуйте, TheAteist, Вы писали:


TA>>>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


E_>>PIVOT — это не стандарт SQL


E_>>Если Access, то см. TRANSFORM


E_>>Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы


E_>>HOW TO: Rotate a Table in SQL Server Q175574


E_>>Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel

E_>>просто для данных на листе Excel

E_>>В общем, лучше бы уточнить задачу


TA>Имееться таблица:


TA>|колонка 1|колонка 2|колонка 3|

TA>|-------------|-------------|-------------|
TA>| 1111111 | 01/01/06 |AAAAAAAA|
TA>| 2222222 | 02/02/06 |BBBBBBBB|
TA>| 3333333 | 03/03/06 |CCCCCCC|
TA>| 4444444 | 04/04/06 |DDDDDDD|

TA>Как можно написать на SQL код чтоб он возвратил таблицу в следущем ввиде


TA>|колонка1|01/01/06|02/02/06|03/03/06|04/04/06|

TA>|------------|------------|------------|------------|------------|
TA>| 1111111| AAAAAAA| nuuuuull| nuuuuull | nuuuuull|
TA>| 2222222| nuuuuull| BBBBBBB| nuuuuull | nuuuuull|
TA>| 3333333| nuuuuull| nuuuuull| CCCCCC | nuuuuull |
TA>| 4444444| nuuuuull| nuuuuull| nuuuuuull| DDDDDD|

TA>*там где написанно 'nuuuuuull' то в том месте должно быть пусто


TA>Как можно это сделать с помощью PIVOT

TA>Если есть другой способ тоже буду рад.
TA>Буде очень блогадарен если поможете мне.

TA>Я к тому же просмотрел следующую ссылку http://www.sql.ru/faq/faq_topic.aspx?fid=358

TA> но он пишет что проблема с pivot в этих строках
TA> SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot
TA> DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot
TA>помогите пожалуйста. и разве не надо заменить ##pivot на свое имя?

TA>СПАСИБО заранее.


##pivot временая таблица
С приведенным примером используй
exec crosstab 'Table1' , 'Column1','Max(Column3)','Column2'

Результат ниже
1111111 AAAAAAAA NULL NULL NULL
2222222 NULL BBBBBBBB NULL NULL
3333333 NULL NULL CCCCCCC NULL
4444444 NULL NULL NULL DDDDDDD


C
Re[4]: SQL - PIVOT
От: TheAteist  
Дата: 16.08.06 19:39
Оценка:
Здравствуйте, DarkSid, Вы писали:

DS>Здравствуйте, TheAteist, Вы писали:


TA>>Здравствуйте, Elena_, Вы писали:


E_>>>Здравствуйте, TheAteist, Вы писали:


TA>>>>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


E_>>>PIVOT — это не стандарт SQL


E_>>>Если Access, то см. TRANSFORM


E_>>>Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы


E_>>>HOW TO: Rotate a Table in SQL Server Q175574


E_>>>Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel

E_>>>просто для данных на листе Excel

E_>>>В общем, лучше бы уточнить задачу


TA>>Имееться таблица:


TA>>|колонка 1|колонка 2|колонка 3|

TA>>|-------------|-------------|-------------|
TA>>| 1111111 | 01/01/06 |AAAAAAAA|
TA>>| 2222222 | 02/02/06 |BBBBBBBB|
TA>>| 3333333 | 03/03/06 |CCCCCCC|
TA>>| 4444444 | 04/04/06 |DDDDDDD|

TA>>Как можно написать на SQL код чтоб он возвратил таблицу в следущем ввиде


TA>>|колонка1|01/01/06|02/02/06|03/03/06|04/04/06|

TA>>|------------|------------|------------|------------|------------|
TA>>| 1111111| AAAAAAA| nuuuuull| nuuuuull | nuuuuull|
TA>>| 2222222| nuuuuull| BBBBBBB| nuuuuull | nuuuuull|
TA>>| 3333333| nuuuuull| nuuuuull| CCCCCC | nuuuuull |
TA>>| 4444444| nuuuuull| nuuuuull| nuuuuuull| DDDDDD|

TA>>*там где написанно 'nuuuuuull' то в том месте должно быть пусто


TA>>Как можно это сделать с помощью PIVOT

TA>>Если есть другой способ тоже буду рад.
TA>>Буде очень блогадарен если поможете мне.

TA>>Я к тому же просмотрел следующую ссылку http://www.sql.ru/faq/faq_topic.aspx?fid=358

TA>> но он пишет что проблема с pivot в этих строках
TA>> SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot
TA>> DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot
TA>>помогите пожалуйста. и разве не надо заменить ##pivot на свое имя?

TA>>СПАСИБО заранее.


DS>##pivot временая таблица

DS> С приведенным примером используй
DS>exec crosstab 'Table1' , 'Column1','Max(Column3)','Column2'

DS>Результат ниже

DS>1111111 AAAAAAAA NULL NULL NULL
DS>2222222 NULL BBBBBBBB NULL NULL
DS>3333333 NULL NULL CCCCCCC NULL
DS>4444444 NULL NULL NULL DDDDDDD


DS>C


проблема в том что когда я внес код(с ссылки http://www.sql.ru/faq/faq_topic.aspx?fid=358 ) в программу SQL то не могу сделaть ни parsin ни execute
когда я делаю parsing он пишет что проблема с pivot в этих строках(syntax error near 'pivot') и когда я нажимаю 2-ной щелчек на эту ошибку то он указывает на эти строки

SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot
DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot

поэтому пока я не смогу сделать parsing то не смогу сделать exec
что это может быть?
и разве не надо заменить ##pivot на свое имя или оставить так?
Re[5]: SQL - PIVOT
От: DarkSid Россия  
Дата: 17.08.06 06:28
Оценка:
Здравствуйте, TheAteist, Вы писали:

TA>Здравствуйте, DarkSid, Вы писали:


DS>>Здравствуйте, TheAteist, Вы писали:


TA>>>Здравствуйте, Elena_, Вы писали:


E_>>>>Здравствуйте, TheAteist, Вы писали:


TA>>>>>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


E_>>>>PIVOT — это не стандарт SQL


E_>>>>Если Access, то см. TRANSFORM


E_>>>>Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы


E_>>>>HOW TO: Rotate a Table in SQL Server Q175574


E_>>>>Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel

E_>>>>просто для данных на листе Excel

E_>>>>В общем, лучше бы уточнить задачу


TA>>>Имееться таблица:


TA>>>|колонка 1|колонка 2|колонка 3|

TA>>>|-------------|-------------|-------------|
TA>>>| 1111111 | 01/01/06 |AAAAAAAA|
TA>>>| 2222222 | 02/02/06 |BBBBBBBB|
TA>>>| 3333333 | 03/03/06 |CCCCCCC|
TA>>>| 4444444 | 04/04/06 |DDDDDDD|

TA>>>Как можно написать на SQL код чтоб он возвратил таблицу в следущем ввиде


TA>>>|колонка1|01/01/06|02/02/06|03/03/06|04/04/06|

TA>>>|------------|------------|------------|------------|------------|
TA>>>| 1111111| AAAAAAA| nuuuuull| nuuuuull | nuuuuull|
TA>>>| 2222222| nuuuuull| BBBBBBB| nuuuuull | nuuuuull|
TA>>>| 3333333| nuuuuull| nuuuuull| CCCCCC | nuuuuull |
TA>>>| 4444444| nuuuuull| nuuuuull| nuuuuuull| DDDDDD|

TA>>>*там где написанно 'nuuuuuull' то в том месте должно быть пусто


TA>>>Как можно это сделать с помощью PIVOT

TA>>>Если есть другой способ тоже буду рад.
TA>>>Буде очень блогадарен если поможете мне.

TA>>>Я к тому же просмотрел следующую ссылку http://www.sql.ru/faq/faq_topic.aspx?fid=358

TA>>> но он пишет что проблема с pivot в этих строках
TA>>> SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot
TA>>> DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot
TA>>>помогите пожалуйста. и разве не надо заменить ##pivot на свое имя?

TA>>>СПАСИБО заранее.


DS>>##pivot временая таблица

DS>> С приведенным примером используй
DS>>exec crosstab 'Table1' , 'Column1','Max(Column3)','Column2'

DS>>Результат ниже

DS>>1111111 AAAAAAAA NULL NULL NULL
DS>>2222222 NULL BBBBBBBB NULL NULL
DS>>3333333 NULL NULL CCCCCCC NULL
DS>>4444444 NULL NULL NULL DDDDDDD


DS>>C


TA>проблема в том что когда я внес код(с ссылки http://www.sql.ru/faq/faq_topic.aspx?fid=358 ) в программу SQL то не могу сделaть ни parsin ни execute

TA>когда я делаю parsing он пишет что проблема с pivot в этих строках(syntax error near 'pivot') и когда я нажимаю 2-ной щелчек на эту ошибку то он указывает на эти строки

TA>SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot

TA>DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot

TA>поэтому пока я не смогу сделать parsing то не смогу сделать exec

TA>что это может быть?
TA>и разве не надо заменить ##pivot на свое имя или оставить так?




Какой SQL Server используешь?
Re[6]: SQL - PIVOT
От: TheAteist  
Дата: 17.08.06 17:07
Оценка:
Здравствуйте, DarkSid, Вы писали:

DS>Здравствуйте, TheAteist, Вы писали:


TA>>Здравствуйте, DarkSid, Вы писали:


DS>>>Здравствуйте, TheAteist, Вы писали:


TA>>>>Здравствуйте, Elena_, Вы писали:


E_>>>>>Здравствуйте, TheAteist, Вы писали:


TA>>>>>>Я читал что можно это сделать с помощью PIVOT но у меня не получаеться.


E_>>>>>PIVOT — это не стандарт SQL


E_>>>>>Если Access, то см. TRANSFORM


E_>>>>>Для SQL server без OLAP и др. можно в некоторых случаях использовать специальные приемы


E_>>>>>HOW TO: Rotate a Table in SQL Server Q175574


E_>>>>>Можно также выбросить данные в Excel и воспользоваться PIVOT от Excel

E_>>>>>просто для данных на листе Excel

E_>>>>>В общем, лучше бы уточнить задачу


TA>>>>Имееться таблица:


TA>>>>|колонка 1|колонка 2|колонка 3|

TA>>>>|-------------|-------------|-------------|
TA>>>>| 1111111 | 01/01/06 |AAAAAAAA|
TA>>>>| 2222222 | 02/02/06 |BBBBBBBB|
TA>>>>| 3333333 | 03/03/06 |CCCCCCC|
TA>>>>| 4444444 | 04/04/06 |DDDDDDD|

TA>>>>Как можно написать на SQL код чтоб он возвратил таблицу в следущем ввиде


TA>>>>|колонка1|01/01/06|02/02/06|03/03/06|04/04/06|

TA>>>>|------------|------------|------------|------------|------------|
TA>>>>| 1111111| AAAAAAA| nuuuuull| nuuuuull | nuuuuull|
TA>>>>| 2222222| nuuuuull| BBBBBBB| nuuuuull | nuuuuull|
TA>>>>| 3333333| nuuuuull| nuuuuull| CCCCCC | nuuuuull |
TA>>>>| 4444444| nuuuuull| nuuuuull| nuuuuuull| DDDDDD|

TA>>>>*там где написанно 'nuuuuuull' то в том месте должно быть пусто


TA>>>>Как можно это сделать с помощью PIVOT

TA>>>>Если есть другой способ тоже буду рад.
TA>>>>Буде очень блогадарен если поможете мне.

TA>>>>Я к тому же просмотрел следующую ссылку http://www.sql.ru/faq/faq_topic.aspx?fid=358

TA>>>> но он пишет что проблема с pivot в этих строках
TA>>>> SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot
TA>>>> DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot
TA>>>>помогите пожалуйста. и разве не надо заменить ##pivot на свое имя?

TA>>>>СПАСИБО заранее.


DS>>>##pivot временая таблица

DS>>> С приведенным примером используй
DS>>>exec crosstab 'Table1' , 'Column1','Max(Column3)','Column2'

DS>>>Результат ниже

DS>>>1111111 AAAAAAAA NULL NULL NULL
DS>>>2222222 NULL BBBBBBBB NULL NULL
DS>>>3333333 NULL NULL CCCCCCC NULL
DS>>>4444444 NULL NULL NULL DDDDDDD


DS>>>C


TA>>проблема в том что когда я внес код(с ссылки http://www.sql.ru/faq/faq_topic.aspx?fid=358 ) в программу SQL то не могу сделaть ни parsin ни execute

TA>>когда я делаю parsing он пишет что проблема с pivot в этих строках(syntax error near 'pivot') и когда я нажимаю 2-ной щелчек на эту ошибку то он указывает на эти строки

TA>>SELECT top 1 @delim = CASE ISNUMERIC(pivot) WHEN 1 THEN '' ELSE '''' END FROM ##pivot

TA>>DECLARE cur_pivot_cursor scroll CURSOR FOR select pivot from ##pivot order by pivot

TA>>поэтому пока я не смогу сделать parsing то не смогу сделать exec

TA>>что это может быть?
TA>>и разве не надо заменить ##pivot на свое имя или оставить так?




DS>Какой SQL Server используешь?


я использую SQL Server 2005
жду скорейшего ответа
спасибо зарание!
Re[7]: SQL - PIVOT
От: DarkSid Россия  
Дата: 18.08.06 08:44
Оценка:
Здравствуйте, TheAteist, Вы писали:

В 2005 Servere есть возможность встроееного pivot см здесь
Автор(ы): А. Каленик
Дата: 13.08.2006
Глава из книги "Использование новых возможностей Microsoft SQL Server 2005".
Материал предоставлен издательством "Питер".


Если хочешь использовать скипт. которвй обсуждали ранее замени в нем текст Pivot на что-то другой, например, pvtMy
Но советую разбраться с Pivot в 2005 — это лучше. Тем более статья и BOL есть. У меня под рукой 2005 нет, к сожалению
Re[8]: SQL - PIVOT
От: TheAteist  
Дата: 18.08.06 11:32
Оценка:
Здравствуйте, DarkSid, Вы писали:

DS>Здравствуйте, TheAteist, Вы писали:


DS>В 2005 Servere есть возможность встроееного pivot см здесь
Автор(ы): А. Каленик
Дата: 13.08.2006
Глава из книги "Использование новых возможностей Microsoft SQL Server 2005".
Материал предоставлен издательством "Питер".


DS>Если хочешь использовать скипт. которвй обсуждали ранее замени в нем текст Pivot на что-то другой, например, pvtMy

DS>Но советую разбраться с Pivot в 2005 — это лучше. Тем более статья и BOL есть. У меня под рукой 2005 нет, к сожалению

Большое спасибо за помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.