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

Откуда:
Сообщений: 193
Всем привет! Есть таблица:

Город Дата Значение 1 Значение2
Казань 01.06.16 11 12
Казань 01.05.16 12 13
Казань 01.04.16 13 14
Казань 01.03.16 14 15
Казань 01.02.16 15 16
Казань 01.01.16 16 17
Казань 01.12.15 17 18
Казань 01.11.15 18 19
Казань 01.10.15 19 20
Казань 01.09.15 20 21
Казань 01.08.15 21 22
Казань 01.07.15 22 23
Челны 01.06.16 23 24
Челны 01.05.16 24 25
Челны 01.04.16 25 26
Челны 01.03.16 26 27
Челны 01.02.16 27 28
Челны 01.01.16 28 29
Челны 01.12.15 29 30
Челны 01.11.15 30 31
Челны 01.10.15 31 32
Челны 01.09.15 32 33
Челны 01.08.15 33 34
Челны 01.07.15 34 35


Как превратить ее в таблицу:
Город июнь, зн 1 июнь, зн 2 май, зн 1 май, зн 2 апрель, зн 1 апрель, зн 2 и т. д.
Казань 11 12 12 13 13 14
Челны 23 24 24 25 25 26

столбцы в порядке убывания даты.
Подскажите пожалуйста))
15 июл 16, 10:38    [19412922]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
RuslanSharipov,

https://blogs.msdn.microsoft.com/kenobonn/2009/03/22/pivot-on-two-or-more-fields-in-sql-server/
15 июл 16, 10:47    [19412979]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT  [new]
RuslanSharipov
Member

Откуда:
Сообщений: 193
TaPaK, Все равно не могу перевернуть правильно таблицу, даже если вместо даты использовать сразу номер месяца и начинать с 1го месяца
15 июл 16, 12:32    [19413850]     Ответить | Цитировать Сообщить модератору
 Re: PIVOT  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
if object_id('tempdb..#tbl') is not null drop table #tbl
Create table #tbl  (City nvarchar(max),t_date date,value int)

insert #tbl
values('Kazan','01.06.16',11),
 ('Kazan','01.05.16',12),
 ('Kazan','01.04.16',13),
 ('Kazan','01.03.16',14),
 ('Kazan','01.02.16',15),
 ('Kazan','01.01.16',16),
 ('Kazan','01.12.15',17),
 ('Kazan','01.11.15',18),
('Chelny','01.06.16',23),
('Chelny','01.05.16',24),
('Chelny','01.04.16',25),
('Chelny','01.03.16',26),
('Chelny','01.02.16',27),
('Chelny','01.01.16',28),
('Chelny','01.12.15',29),
('Chelny','01.11.15',30)

DECLARE @cols AS NVARCHAR(MAX),
    @query  AS NVARCHAR(MAX);

select @cols =  COALESCE(@cols + ', ', '') + QUOTENAME(cast(t_date as varchar)) 
from (select distinct t_date from #tbl) a order by t_date desc

set @query = 'SELECT City, ' + @cols + ' from 
            (
                select City
					,t_date
					,value                  
               
                from #tbl
           ) x
            pivot 
            (
                 max(value)
                for t_date in (' + @cols + ')
            ) p '

print @query

execute(@query)
15 июл 16, 17:16    [19415641]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить