将多列选择为多行

0 sql t-sql sql-server

UserID  | UserName  | 534 more columns -->
1       | John      | 534 more values  -->
Run Code Online (Sandbox Code Playgroud)

我正在从这些列中的大约 78 列中查找此输出:

Column  | Value 
UserID  | 1
UserName| John
+78 more rows
Run Code Online (Sandbox Code Playgroud)

Gor*_*off 5

这称为逆透视,我喜欢使用apply

select v.*
from t cross apply
     (values ('UserId', t.UserId),
             ('UserName', t.UserName)
             . . .
     ) v(column, value);
Run Code Online (Sandbox Code Playgroud)

请注意,这假设所有列都具有相同的类型。

apply实现技术上所谓的“横向连接”。还有其他方法可以实现此逻辑 - 使用union allunpivot

然而,横向连接非常强大,反旋转是使用它们的一个很好的介绍。