Как я могу отобразить данные в строках в одну строку, так что каждый столбец является уникальным значением в SQL - PullRequest
0 голосов
/ 15 октября 2018

Сейчас я новичок в SQL, но надеюсь, что вы сможете помочь мне правильно отобразить значения.Лучший способ объяснить это с помощью диаграммы.

Что у меня есть: таблица со строками и столбцами, связанными идентификатором со значениями в каждой строке, как показано на снимке экрана ниже:

What I have

Что мне нужно, это сжать это в строку следующим образом:

enter image description here

Есть ли способ написать сценарий / запрос, который позволил бымне сделать это?Извините, но я не имею ни малейшего представления, как это сделать на данный момент.Я могу думать о том, чтобы запустить это в другой программе, но подозреваю, что это можно сделать в SQL.Все еще учусь, прошу прощения за мое невежество

Ответы [ 2 ]

0 голосов
/ 15 октября 2018

На случай, если ваши [Unique ID] не являются последовательными, рассмотрим следующее:

Пример

Select *
 From  (
        Select A.ID
              ,Col = concat('ID',Dense_Rank() over (partition by ID order by  [Unique ID] ),' ',B.Item)
              ,Value = B.Value
         From  YourTable A
         Cross Apply ( values ('Unique' ,concat('',[Unique ID]))
                             ,('Column1',Column1)
                             ,('Column2',Column2)
                     ) B(Item,Value)
       ) src 
 Pivot (max(Value) for Col in ( [ID1 Unique] ,[ID2 Unique] ,[ID3 Unique] ,[ID4 Unique]   -- Expand as necessary
                               ,[ID1 Column1],[ID2 Column1],[ID3 Column1],[ID4 Column1]  -- Expand as necessary
                               ,[ID1 Column2],[ID2 Column2],[ID3 Column2],[ID4 Column2]  -- Expand as necessary
                              )) pvt

Возвращает

enter image description here

0 голосов
/ 15 октября 2018

Это предлагает мне сделать условную агрегацию:

select id, 
       max(case when UniqueId = 1 then 1 end) as UniqueId1,
       max(case when UniqueId = 2 then 2 end) as UniqueId2,
       max(case when UniqueId = 3 then 3 end) as UniqueId3,
       max(case when UniqueId = 1 then column1 end) as UniqueId1Col1,
       max(case when UniqueId = 2 then column1 end) as UniqueId2Col1,
       max(case when UniqueId = 3 then column1 end) as UniqueId3Col1,
       max(case when UniqueId = 1 then column2 end) as UniqueId1Col2,
       max(case when UniqueId = 2 then column2 end) as UniqueId2Col2,
       max(case when UniqueId = 3 then column2 end) as UniqueId3Col2
from table t
group by id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...