在 SQL 中获取列名和数据到行

Sul*_*lfy 0 sql t-sql sql-server pivot unpivot

我有一张包含基本员工详细信息的表格,如下所示:

表:tblEmployees

EmpID   Name    Contact   Sex
100     John    55555     M
200     Kate    44444     F
300     Sam     88888     M
Run Code Online (Sandbox Code Playgroud)

我想获得如下特定员工的查询结果,其中 EmpID = 200

Col1    Col2
EmpID   200
Name    Kate
Sex     F
Run Code Online (Sandbox Code Playgroud)

GMB*_*GMB 5

您可以使用交叉应用:

select t.*
from employees e
cross apply (values 
    ('empid', cast(empid as varchar(100))),
    ('name', name), 
    ('sex', sex)
) t(attr, value)
where e.empid = 200
Run Code Online (Sandbox Code Playgroud)

据推测,empid是一个数字,因此需要显式转换(否则 sql server 将尝试将 name 和 sex 转换为数字,这将失败)。

DB Fiddle 上的演示

属性 | 价值
:---- | :----
清淡 | 200  
姓名 | 凯特
性 | F