我希望获得垂直的单行数据。我相信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

最佳答案

我会用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);

关于sql - 使用SQL UNPIVOT使用多列使行垂直,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56155701/

10-16 17:20