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

Откуда:
Сообщений: 2
Добрый день!
Имеется многоуровневая таблица со структурой подчинения сотрудников, в трех уровнях выглядит так:

declare @t table (zam varchar (255), rsm varchar(255), tmd varchar(255))
insert @t values ('Садыков', 'RSM1', 'TMD1'), ('Садыков', 'RSM1', 'TMD2'), ('Садыков', 'RSM2', '-'), ('Садыков', 'RSM3', '-'), ('Садыков', 'RSM4', 'TMD3'), ('Садыков', 'RSM5', 'TMD4');

zam_sd rsm tmd
Ген.дир RSM1 TMD1
Ген.дир RSM1 TMD2
Ген.дир RSM2 -
Ген.дир RSM3 -
Ген.дир RSM4 TMD3
Ген.дир RSM5 TMD4


Как можно ее перевернуть, чтобы она была вот такого типа:

ген.дир ген.дир ген.дир ген.дир ген.дир
RSM1 RSM2 RSM3 RSM4 RSM5
TMD1; TMD2 - - TMD3 TMD4


То есть, например, двух ,TMD поместить в одну строку в подчинение RSM1.
26 июн 18, 10:08    [21520844]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть таблицу  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
el_le,

declare @t table (zam varchar (255), rsm varchar(255), tmd varchar(255))
insert @t values ('Садыков', 'RSM1', 'TMD1'), ('Садыков', 'RSM1', 'TMD2'), ('Садыков', 'RSM2', '-'), ('Садыков', 'RSM3', '-'), ('Садыков', 'RSM4', 'TMD3'), ('Садыков', 'RSM5', 'TMD4');

With t as (
Select dense_rank() over(Order by zam, rsm) as ID, zam, rsm, tmd From @t),
t2 as (
Select distinct ID,stuff((Select distinct ', '+tmd From t as b Where a.ID = b.ID for XML path('')),1,2,'') as tmd From t as a
)
--Select * From t2
Select lvl, [1] ,[2] ,[3] ,[4] ,[5] 
From (
Select 1 as lvl,ID,zam From t
union all
Select 2 as lvl,ID,rsm From t
union all
Select 3 as lvl,ID,tmd From t2
) as t
pivot( max(zam) for ID in ([1],[2],[3],[4],[5]) ) as p
Order by lvl
26 июн 18, 11:21    [21521256]     Ответить | Цитировать Сообщить модератору
 Re: Перевернуть таблицу  [new]
el_le
Member

Откуда:
Сообщений: 2
Kopelly, Спасибо огромное!
26 июн 18, 11:27    [21521281]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить