Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Задача как развенуть преобразовать таблицу (x таблица)  [new]
stim24
Member

Откуда: Иркутск
Сообщений: 173
Пусть есть таблица
id, god, s1,s2

Нужно преобразовать таблицу в такой вид
id, s1(god 1), s2(god 1),s1(god 2), s2(god 2),...

на весь период который есть в изначальной таблице
25 сен 09, 06:00    [7706383]     Ответить | Цитировать Сообщить модератору
 Re: Задача как развенуть преобразовать таблицу (x таблица)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
PIVOT, CASE
25 сен 09, 06:35    [7706400]     Ответить | Цитировать Сообщить модератору
 Re: Задача как развенуть преобразовать таблицу (x таблица)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
declare @t table (id int, god int, s1 int, s2 int)

insert into @t
select 1, 2001, 10, 15
union all
select 2, 2002, 23, 20
union all
select 3, 2003, 23, 20
union all
select 4, 2004, 21, 27
union all
select 5, 2005, 29, 34


select id
,MAX(case god when 2001 then s1 else 0 end) as 's1(2001)' 
,MAX(case god when 2001 then s2 else 0 end) as 's2(2001)'

,MAX(case god when 2002 then s1 else 0 end) as 's1(2002)'
,MAX(case god when 2002 then s2 else 0 end) as 's2(2002)'

,MAX(case god when 2003 then s1 else 0 end) as 's1(2003)'
,MAX(case god when 2003 then s2 else 0 end) as 's2(2003)'

,MAX(case god when 2004 then s1 else 0 end) as 's1(2004)'
,MAX(case god when 2004 then s2 else 0 end) as 's2(2004)'

,MAX(case god when 2005 then s1 else 0 end) as 's1(2005)'
,MAX(case god when 2005 then s2 else 0 end) as 's2(2005)'
from @t t1
group by id



Картинка с другого сайта.
25 сен 09, 07:24    [7706428]     Ответить | Цитировать Сообщить модератору
 Re: Задача как развенуть преобразовать таблицу (x таблица)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
или даже так:

select
MAX(case god when 2001 then s1 else 0 end) as 's1(2001)' 
,MAX(case god when 2001 then s2 else 0 end) as 's2(2001)'

,MAX(case god when 2002 then s1 else 0 end) as 's1(2002)'
,MAX(case god when 2002 then s2 else 0 end) as 's2(2002)'

,MAX(case god when 2003 then s1 else 0 end) as 's1(2003)'
,MAX(case god when 2003 then s2 else 0 end) as 's2(2003)'

,MAX(case god when 2004 then s1 else 0 end) as 's1(2004)'
,MAX(case god when 2004 then s2 else 0 end) as 's2(2004)'

,MAX(case god when 2005 then s1 else 0 end) as 's1(2005)'
,MAX(case god when 2005 then s2 else 0 end) as 's2(2005)'
from @t t1
25 сен 09, 07:31    [7706430]     Ответить | Цитировать Сообщить модератору
 Re: Задача как развенуть преобразовать таблицу (x таблица)  [new]
stim24
Member

Откуда: Иркутск
Сообщений: 173
Knyazev Alexey,

так вы делаете если знаете сколько периодов... жестко а их может быть N штук
25 сен 09, 08:57    [7706541]     Ответить | Цитировать Сообщить модератору
 Re: Задача как развенуть преобразовать таблицу (x таблица)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
stim24
Knyazev Alexey,

так вы делаете если знаете сколько периодов... жестко а их может быть N штук


тогда тоже самое, но формируйте запрос динамически
25 сен 09, 08:59    [7706546]     Ответить | Цитировать Сообщить модератору
 Re: Задача как развенуть преобразовать таблицу (x таблица)  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
https://www.sql.ru/faq/faq_topic.aspx?fid=358


Картинка с другого сайта.
25 сен 09, 09:01    [7706554]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить