Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Разворот таблицы с группировкой  [new]
sasha3876
Guest
Есть такие данные:
select 123 id,4 col1,'gtr' col2, null col3, 3 col4 union all
select 123, null, 'abc', null, 3  union all
select 123, 2, 'qwe', null, 1  union all
select 124 id,4 col1,null col2, null col3, 3 col4 union all
select 124, 8, 'abc', 1, 3  union all
select 124, 2, 'abc', 8, 1




Получить надо так:
select 123 id,'4, 2' col1,'gtr, abc, qwe' col2, null col3, '3, 1' col4 union all
select 124 id,'4, 8, 2' col1,'abc' col2, '1,8' col3, '3,1' col4 
9 янв 12, 05:03    [11872712]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
sasha3876
Guest
забыл добавбить -- SQL Server 2005
9 янв 12, 07:32    [11872754]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
select * into #t from
(
select 123 id,4 col1,'gtr' col2, null col3, 3 col4 union all
select 123, null, 'abc', null, 3  union all
select 123, 2, 'qwe', null, 1  union all
select 124 id,4 col1,null col2, null col3, 3 col4 union all
select 124, 8, 'abc', 1, 3  union all
select 124, 2, 'abc', 8, 1
) t

select id
, stuff ( ( select distinct ',' + convert( varchar, col1 ) from #t where id = t.id for xml path('') ), 1, 1, '' ) col1
, stuff ( ( select distinct ',' + convert( varchar, col2 ) from #t where id = t.id for xml path('') ), 1, 1, '' ) col2 
, stuff ( ( select distinct ',' + convert( varchar, col3 ) from #t where id = t.id for xml path('') ), 1, 1, '' ) col3 
, stuff ( ( select distinct ',' + convert( varchar, col4 ) from #t where id = t.id for xml path('') ), 1, 1, '' ) col4  
from #t t
group by id
9 янв 12, 09:35    [11872835]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
sasha3876
Guest
все работает, но колонки с цифрами надо суммировать


такие данные:
select 123 id,4.45 col1,'gtr' col2, null col3, 3.05 col4 union all
select 123, null, 'abc', null, 3.05  union all
select 123, 2.76, 'qwe', null, 1  union all
select 124 id,4 col1,null col2, null col3, 3 col4 union all
select 124, 8.09, 'abc', 1, 3.25  union all
select 124, 2, 'abc', 8, 1



Получить надо так:
select 123 id, 7.21 col1,'gtr, abc, qwe' col2, null col3, 7.10 col4 union all
select 124 id, 14.09 col1,'abc' col2, '1,8' col3, 7.25 col4 
10 янв 12, 19:54    [11881230]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
sasha3876, SUM()
10 янв 12, 20:11    [11881297]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
usausa
Member

Откуда:
Сообщений: 55
У меня есть продолжение етого вопроса.

Вариант с временной таблицой не подходит, как можно переделать етот селект без временной таблицы , так чтобы был один селект и начинался бы с select?
11 янв 12, 22:27    [11888875]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
usausa
У меня есть продолжение етого вопроса.

Вариант с временной таблицой не подходит, как можно переделать етот селект без временной таблицы , так чтобы был один селект и начинался бы с select?

Использовать вместо временной таблицы ту, которая вам нужна))).
11 янв 12, 22:35    [11888914]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
sasha3876
все работает, но колонки с цифрами надо суммировать


такие данные:
select 123 id,4.45 col1,'gtr' col2, null col3, 3.05 col4 union all
select 123, null, 'abc', null, 3.05  union all
select 123, 2.76, 'qwe', null, 1  union all
select 124 id,4 col1,null col2, null col3, 3 col4 union all
select 124, 8.09, 'abc', 1, 3.25  union all
select 124, 2, 'abc', 8, 1



Получить надо так:
select 123 id, 7.21 col1,'gtr, abc, qwe' col2, null col3, 7.10 col4 union all
select 124 id, 14.09 col1,'abc' col2, '1,8' col3, 7.25 col4 



select id
, sum( col1 ) col1
, stuff ( ( select distinct ',' + convert( varchar, col2 ) from ( select 123 id,4.45 col1,'gtr' col2, null col3, 3.05 col4 union all
                                                                  select 123, null, 'abc', null, 3.05  union all
                                                                  select 123, 2.76, 'qwe', null, 1  union all
                                                                  select 124 id,4 col1,null col2, null col3, 3 col4 union all
                                                                  select 124, 8.09, 'abc', 1, 3.25  union all
                                                                  select 124, 2, 'abc', 8, 1
                                                                ) a
              where id = t.id for xml path('') ), 1, 1, '' ) col2 
, stuff ( ( select distinct ',' + convert( varchar, col3 ) from ( select 123 id,4.45 col1,'gtr' col2, null col3, 3.05 col4 union all
                                                                  select 123, null, 'abc', null, 3.05  union all
                                                                  select 123, 2.76, 'qwe', null, 1  union all
                                                                  select 124 id,4 col1,null col2, null col3, 3 col4 union all
                                                                  select 124, 8.09, 'abc', 1, 3.25  union all
                                                                  select 124, 2, 'abc', 8, 1
                                                                ) a
              where id = t.id for xml path('') ), 1, 1, '' ) col3
, sum( col4 ) col4  
from ( select 123 id,4.45 col1,'gtr' col2, null col3, 3.05 col4 union all
select 123, null, 'abc', null, 3.05  union all
select 123, 2.76, 'qwe', null, 1  union all
select 124 id,4 col1,null col2, null col3, 3 col4 union all
select 124, 8.09, 'abc', 1, 3.25  union all
select 124, 2, 'abc', 8, 1
) t
group by id
11 янв 12, 22:44    [11888960]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
usausa
Member

Откуда:
Сообщений: 55
етот вариант я рассматривал, но к сожалению у меня 22 колонки в моём селецте, т.е. 22 раза а не 2 делать такие вставки. После чего аппликейшин выдал ошибку(показать не могу, так как ничего конкретного не говорит ета ошибка)

Поетому спросил повторно...

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
from ( select 123 id,4.45 col1,'gtr' col2, null col3, 3.05 col4 union all
select 123, null, 'abc', null, 3.05 union all
select 123, 2.76, 'qwe', null, 1 union all
select 124 id,4 col1,null col2, null col3, 3 col4 union all
select 124, 8.09, 'abc', 1, 3.25 union all
select 124, 2, 'abc', 8, 1
) a
11 янв 12, 22:47    [11888981]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
usausa, cte
11 янв 12, 23:17    [11889128]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
usausa
Member

Откуда:
Сообщений: 55
я не могу WITH, потому что аппликатион понимает квери , которые начинаются со слова select

ПС. Етот вариан пробовал тоже, не понимала прога..


>>>>>>>>>>>>>>>>>>>>

[ WITH <common_table_expression> [ ,...n ] ]

<common_table_expression>::=
expression_name [ ( column_name [ ,...n ] ) ]
AS
( CTE_query_definition )
11 янв 12, 23:28    [11889189]     Ответить | Цитировать Сообщить модератору
 Re: Разворот таблицы с группировкой  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
usausa, поместить во вьюху, выбор из вьюхи.
11 янв 12, 23:32    [11889215]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить