0

我有一张桌子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   

我想要这种格式的结果:

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

不涉及主键或外键。

我应该使用Pivot这个功能吗?

4

1 回答 1

7

您可以使用CROSS APPLYVALUES取消透视数据:

select id, jobid,
    name,
    role
from UserRoleTable
cross apply
(
    values ('Engg', engg), ('Manager', Manager)
) c (role, name)
where name is not null;

请参阅带有演示的 SQL Fiddle

或者您可以使用以下UNPIVOT功能:

select id, jobid, name, role
from UserRoleTable
unpivot
(
  name
  for role in (Engg, Manager)
) unpiv;

请参阅带有演示的 SQL Fiddle

这是一个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 ;

请参阅带有演示的 SQL Fiddle

于 2013-05-30T21:23:06.137 回答