将多列选择为多行

时间:2018-01-26 14:42:56

标签: sql sql-server tsql

UserID  | UserName  | 534 more columns -->
1       | John      | 534 more values  -->

我只是从这些列中的78个中寻找这个输出:

Column  | Value 
UserID  | 1
UserName| John
+78 more rows

1 个答案:

答案 0 :(得分:3)

这称为 unpivoting ,我喜欢使用apply

select v.*
from t cross apply
     (values ('UserId', t.UserId),
             ('UserName', t.UserName)
             . . .
     ) v(column, value);

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

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

然而,横向连接非常强大,而且对于使用它们来说,不透明是一个很好的介绍。