use*_*237 0 sql sql-server sql-server-2008
我有一个表UserRoleTable,它有列ID,JobId,ProjectManager,Engineer:
**ID JobId Engg Manager**
001 1001 x Null
002 1002 Null P
003 1003 Y Q
004 1004 Z Null
005 1005 Null J
Run Code Online (Sandbox Code Playgroud)
我想要这种格式的结果:
ID JobId Name Role
001 1001 x Engg
002 1002 P Manager
003 1003 Y Engg
003 1003 Q Manager
004 1004 Z Engg
005 1005 J Manager
Run Code Online (Sandbox Code Playgroud)
没有涉及主键或外键.
我应该使用Pivot这个功能吗?
您可以使用CROSS APPLY和VALUES取消数据:
select id, jobid,
name,
role
from UserRoleTable
cross apply
(
values ('Engg', engg), ('Manager', Manager)
) c (role, name)
where name is not null;
Run Code Online (Sandbox Code Playgroud)
或者你可以使用这个UNPIVOT功能:
select id, jobid, name, role
from UserRoleTable
unpivot
(
name
for role in (Engg, Manager)
) unpiv;
Run Code Online (Sandbox Code Playgroud)
这是一个UNION解决方案:
SELECT id, jobid, Engg AS name, 'Engg' AS role
FROM UserRoleTable
WHERE Engg IS NOT NULL
UNION ALL
SELECT id, jobid, Manager, 'Manager'
FROM UserRoleTable
WHERE Manager IS NOT NULL
ORDER BY id, role ;
Run Code Online (Sandbox Code Playgroud)