MS SQL Server. Транспонировать столбцы данных в строки данных - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть таблица деталей, которую можно описать следующим образом:

Create table #Details (
Id int identity,
HeaderId int,
ChannelId int,
Value float
)

Вставляем некоторые начальные данные:

insert into #Details (HeaderId, ChannelId, Value) values(1, 0, 1019.51)
insert into #Details (HeaderId, ChannelId, Value) values(1, 1, 20.1)
insert into #Details (HeaderId, ChannelId, Value) values(1, 2, 21.2)
insert into #Details (HeaderId, ChannelId, Value) values(1, 3, 22.3)
insert into #Details (HeaderId, ChannelId, Value) values(1, 4, 23.4)

insert into #Details (HeaderId, ChannelId, Value) values(2, 0, 1020.62)
insert into #Details (HeaderId, ChannelId, Value) values(2, 1, 26.1)
insert into #Details (HeaderId, ChannelId, Value) values(2, 2, 27.2)
insert into #Details (HeaderId, ChannelId, Value) values(2, 3, 28.3)
insert into #Details (HeaderId, ChannelId, Value) values(2, 4, 29.4)

Выбрать все производит следующее:

enter image description here

Я хотел бы переместить данные столбца в строки, чтобы получить следующий вывод:

enter image description here

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 05 ноября 2018

Это должно работать:

select HeaderId
  , [0] as ChannelId0
  , [1] as ChannelId1
  , [2] as ChannelId2
    , [3] as ChannelId3
      , [4] as ChannelId4
from
(
  select HeaderId, ChannelId,Value
  from #Details
) x
pivot
(
  max(Value)
  for ChannelId in([0],[1],[2], [3],[4],[5])
)p
0 голосов
/ 05 ноября 2018

Вот, пожалуйста. Просто выберите сначала HeaderId,value, ChannelId в подзапросе, а затем разверните.

DECLARE @tbl TABLE (Id int identity,
HeaderId int,
ChannelId int,
Value float)

insert into @tbl (HeaderId, ChannelId, Value) values(1, 0, 1019.51)
insert into @tbl (HeaderId, ChannelId, Value) values(1, 1, 20.1)
insert into @tbl (HeaderId, ChannelId, Value) values(1, 2, 21.2)
insert into @tbl (HeaderId, ChannelId, Value) values(1, 3, 22.3)
insert into @tbl (HeaderId, ChannelId, Value) values(1, 4, 23.4)

insert into @tbl (HeaderId, ChannelId, Value) values(2, 0, 1020.62)
insert into @tbl (HeaderId, ChannelId, Value) values(2, 1, 26.1)
insert into @tbl (HeaderId, ChannelId, Value) values(2, 2, 27.2)
insert into @tbl (HeaderId, ChannelId, Value) values(2, 3, 28.3)
insert into @tbl (HeaderId, ChannelId, Value) values(2, 4, 29.4)

SELECT * 
FROM
    (
    SELECT HeaderId,value, ChannelId
        FROM
    @tbl
    )T
PIVOT
    (
        SUM(value)

        FOR ChannelId IN ([0],[1], [2], [3], [4]

    )
) AS PivotTable;

Результат ниже: enter image description here

...