Структура данных по горизонтали в Sql - PullRequest
0 голосов
/ 25 октября 2018

Привет У меня есть запрос, который возвращает данные, как показано ниже

select
    n.Key, np.value
from
    Test1 np
    join Test2 n on n.Key = np.Key
where
    n.NodeKey = 10000002 && np.pKey in (4,6,7,10,12)

, который возвращает данные, как показано ниже

Key            value
--------       ------
10000002        2
10000002        0
10000002        2
10000002       True
10000002        1

Test2 - это поиск по таблице, как показано ниже

  Key      PKey           Value                                                                                                                                                                                                                                                    
---------------------------------------
10000002     4               2                                                                                                                                                                                                                                                                
10000002     6               0                                                                                                                                                                                                                                                                
10000002     7               2                                                                                                                                                                                                                                                                
10000002     10              True
10000002     12              1     

Хотел изменить запрос, чтобы он возвращал данные, как показано ниже

NodeKey   Value1   Value2   Value3  Value4  Value5
--------------------------------------------------
10000002     2        0        2       True    1

Не могли бы вы помочь мне с этим.

Ответы [ 2 ]

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

Вы можете использовать предложение pivot как:

with t as
(
select i.* from Test2 i 
) 
select [Key] as 'NodeKey', 
       [4]   as 'Value1',
       [6]   as 'Value2',
       [7]   as 'Value3',
       [10]  as 'Value4',
       [12]  as 'Value5'
  from t
 pivot
 (
  max(Value) for PKey in ([4], [6], [7], [10], [12])    
 ) q;

NodeKey  Value1 Value2  Value3  Value4  Value5
-------- ------ ------  ------  ------ -------
10000002    2     0       2      True     1

Rextester Demo

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

Вы можете попробовать использовать sql-server pivot Для структурирования данных по горизонтали.Попробуйте следующий код ..

Добавьте еще один столбец с помощью функции row_number () и сохраните весь результат во временной таблице

select
    n.Key, np.value,
    'Value'+convert(varchar(2),ROW_NUMBER() over (partition by [key] order by [key])) as tmpCol 
    into #tempTable --store result in tmp table
from
    Test1 np
    join Test2 n on n.Key = np.Key
where
    n.NodeKey = 10000002 && np.pKey in (4,6,7,10,12)

, затем используйте приведенный ниже сводный код.

select *
from 
(
  select [key], value,tmpCol
  from #tempTable
) src
pivot
(
  max(value)
  for tmpCol in (value1,value2,value3,value4,value5)
) piv;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...