Использование SQL UNPIVOT, чтобы сделать строку вертикальной, используя несколько столбцов - PullRequest
2 голосов
/ 15 мая 2019

У меня есть один ряд данных, который я хочу сделать вертикальным. Я считаю, что UNPIVOT - мой лучший вариант, но я не смог заставить его работать. Моя строка содержит следующие данные:

id | Qualifier 1  | Qualifier 2  | Qualifier 3 | Value 1 | Value 2 | Value 3
------------------------------------------------------------------------------
1      CP              HP            TE         0000000000 1111111111 2222222222

Я хочу, чтобы все квалификаторы в строке были связаны с их значением. Например, Qualifer 1 всегда будет связан со значением 1. Он никогда не будет связан со значением 2. Я надеюсь, что результат будет выглядеть следующим образом:

 id | Qualifier | Value
 -----------------------
  1     CP       0000000000 
  1     HP       1111111111
  1     TE       2222222222

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

SELECT ID, NUMBERS, 
FROM TABLE1
UNPIVOT
(
numbers for nums in (Value1,Value2,Value3) 
) unPiv

1 Ответ

8 голосов
/ 15 мая 2019

Я бы использовал cross apply:

select t.id, v.Qualifier, v.Value
from t cross apply
     (values (t.Qualifier1, t.Value1),
             (t.Qualifier2, t.Value2),
             (t.Qualifier3, t.Value3)
     ) v(Qualifier, Value);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...