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

Откуда:
Сообщений: 16
Доброго времени суток!
Возникла необходимость преобразовать получаемую таблицу из вида:

MonthResidentProfitBox
month1resident1profit1box1
month2resident1profit2box2
month3resident2profit3box3
month4resident3profit4box4


в вид:

Residentmonth1_profitmonth1_Boxmonth2_profitmonth2_Boxmonth3_profitmonth3_Boxmonth4_profitmonth4_Box
resident1profit1box1profit2box2nullnullnullnull
resident2nullnullnullnullprofit3box3nullnull
resident3nullnullnullnullnullnullprofit4box4


Есть чувство, что нужно двигаться в сторону Pivot, но как сообразить не могу.
Буду благодарен за рабочие идеи!
7 фев 12, 08:53    [12044721]     Ответить | Цитировать Сообщить модератору
 Re: преобразование результативной таблицы (pivot)  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
proof666, если количество месяцев и соответственно столбцев - произвольное, то только через динамику. Примеры есть даже в соседних с вашей темой.
7 фев 12, 09:46    [12044906]     Ответить | Цитировать Сообщить модератору
 Re: преобразование результативной таблицы (pivot)  [new]
proof666
Member

Откуда:
Сообщений: 16
kDnZP, количество месяцев во всех случаях = 12, т.е. для каждого резидента будет обязательно 12 строк... как будут называться итоговые столбцы не важно...
7 фев 12, 09:58    [12044953]     Ответить | Цитировать Сообщить модератору
 Re: преобразование результативной таблицы (pivot)  [new]
proof666
Member

Откуда:
Сообщений: 16
kDnZP, если бы значение было только одно, проблем не возникло бы, транспонировалось бы обычным pivot, но в данном случае значения два, что и не могу побороть...
7 фев 12, 10:00    [12044962]     Ответить | Цитировать Сообщить модератору
 Re: преобразование результативной таблицы (pivot)  [new]
Ken@t
Member

Откуда: 大地
Сообщений: 3265
proof666
kDnZP, количество месяцев во всех случаях = 12, т.е. для каждого резидента будет обязательно 12 строк... как будут называться итоговые столбцы не важно...

А вот оператор pivot другого мнения, однако для case можно и избежать явного указания значений.
7 фев 12, 10:01    [12044967]     Ответить | Цитировать Сообщить модератору
 Re: преобразование результативной таблицы (pivot)  [new]
kDnZP
Member [заблокирован]

Откуда: ★[msg=16399436]★[msg=20850760]
Сообщений: 11289
proof666, и в чем проблема?
DECLARE @tbl TABLE (month VARCHAR(30), resident VARCHAR(30), profit VARCHAR(30), box  VARCHAR(30))
INSERT INTO @tbl
SELECT 'month1', 'resident1', 'profit1', 'box1' UNION ALL SELECT 
'month2', 'resident1', 'profit2', 'box2' UNION ALL SELECT 
'month3', 'resident2', 'profit3', 'box3' UNION ALL SELECT 
'month4', 'resident3', 'profit4', 'box4'

SELECT  resident,MAX(CASE WHEN [month]='month1' THEN profit END) monthprofit1
,MAX(CASE WHEN [month]='month1' THEN box END) boxprofit1
--, и т.д.
FROM    @tbl
GROUP BY resident
7 фев 12, 10:09    [12044998]     Ответить | Цитировать Сообщить модератору
 Re: преобразование результативной таблицы (pivot)  [new]
proof666
Member

Откуда:
Сообщений: 16
kDnZP, большое спасибо! логику понял...
7 фев 12, 17:36    [12049091]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить