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

Откуда:
Сообщений: 1494
Исходная и нужная таблица в скриншоте. Не получается развернуть таблицу Pivot'ом.
Наверное еще плохо с ней разобрался. Прошу помочь.
Немного помогу с началом):

declare @t table ([Название] [varchar](10), [Код] [varchar](10), [Уровень] [int])
insert into @t

select 'Дом 20' [Название], '000020' [Код], 6 [Уровень]
union all
select 'Ленина 7' [Название], '00071' [Код], 5 [Уровень]
union all
select 'Москва' [Название], '0001' [Код], 4 [Уровень]
union all
select 'Моск. обл.' [Название], '001' [Код], 3 [Уровень]
union all
select 'Россия' [Название], '01' [Код], 2 [Уровень]
union all
select 'Евразия' [Название], '0' [Код], 1 [Уровень]


К сообщению приложен файл. Размер - 39Kb
28 янв 14, 06:17    [15479376]     Ответить | Цитировать Сообщить модератору
 Re: Повернуть таблицу вертикально. Не получается  [new]
aleks2
Guest
Патамушто это не Pivot.

1. Делаешь времянку с нужной структурой.
2. Заполняешь.
3. Выбираешь из времянки.
28 янв 14, 06:26    [15479379]     Ответить | Цитировать Сообщить модератору
 Re: Повернуть таблицу вертикально. Не получается  [new]
Santa89
Member

Откуда:
Сообщений: 1494
aleks2, жалко, я думал как то изящно это можно сделать
28 янв 14, 06:42    [15479385]     Ответить | Цитировать Сообщить модератору
 Re: Повернуть таблицу вертикально. Не получается  [new]
LexusR
Member

Откуда: Novosibirsk
Сообщений: 1887
if OBJECT_ID('tempdb..#t') is not null drop table #t
create table  #t ([Название] [varchar](10), [Код] [varchar](10), [Уровень] [int])
insert into #t
select 'Дом 20' [Название], '000020' [Код], 6 [Уровень]
union all
select 'Ленина 7' [Название], '00071' [Код], 5 [Уровень]
union all
select 'Москва' [Название], '0001' [Код], 4 [Уровень]
union all
select 'Моск. обл.' [Название], '001' [Код], 3 [Уровень]
union all
select 'Россия' [Название], '01' [Код], 2 [Уровень]
union all
select 'Евразия' [Название], '0' [Код], 1 [Уровень]


declare @SQL varchar(8000)
select @SQL= ISNULL(@SQL+',','select ') + 'MAX(CASE WHEN [Уровень]='+cast([Уровень] as varchar(10))+' THEN [Код] ELSE NULL END) AS [Код_'+cast([Уровень] as varchar(10))+'] '
+',MAX(CASE WHEN [Уровень]='+cast([Уровень] as varchar(10))+'  THEN [Название] ELSE NULL END) AS [Название_'+cast([Уровень] as varchar(10))+' ]'
from #t order by [Уровень]
exec(@SQL+' from #t')
28 янв 14, 07:23    [15479416]     Ответить | Цитировать Сообщить модератору
 Re: Повернуть таблицу вертикально. Не получается  [new]
Santa89
Member

Откуда:
Сообщений: 1494
LexusR, спасибо!
28 янв 14, 07:50    [15479447]     Ответить | Цитировать Сообщить модератору
 Re: Повернуть таблицу вертикально. Не получается  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
LexusR
if OBJECT_ID('tempdb..#t') is not null drop table #t
create table  #t ([Название] [varchar](10), [Код] [varchar](10), [Уровень] [int])
insert into #t
select 'Дом 20' [Название], '000020' [Код], 6 [Уровень]
union all
select 'Ленина 7' [Название], '00071' [Код], 5 [Уровень]
union all
select 'Москва' [Название], '0001' [Код], 4 [Уровень]
union all
select 'Моск. обл.' [Название], '001' [Код], 3 [Уровень]
union all
select 'Россия' [Название], '01' [Код], 2 [Уровень]
union all
select 'Евразия' [Название], '0' [Код], 1 [Уровень]


declare @SQL varchar(8000)
select @SQL= ISNULL(@SQL+',','select ') + 'MAX(CASE WHEN [Уровень]='+cast([Уровень] as varchar(10))+' THEN [Код] ELSE NULL END) AS [Код_'+cast([Уровень] as varchar(10))+'] '
+',MAX(CASE WHEN [Уровень]='+cast([Уровень] as varchar(10))+'  THEN [Название] ELSE NULL END) AS [Название_'+cast([Уровень] as varchar(10))+' ]'
from #t order by [Уровень]
exec(@SQL+' from #t')
Здесь ведь просто найдется максимальное значение по каждому уровню, умноженное на число элементов в уровне. Или я чего-то не до понял?
28 янв 14, 08:10    [15479469]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить