SQL Server 2008 Pivot没有聚合函数

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这个功能吗?

Tar*_*ryn 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;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

或者你可以使用这个UNPIVOT功能:

select id, jobid, name, role
from UserRoleTable
unpivot
(
  name
  for role in (Engg, Manager)
) unpiv;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo

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

请参阅SQL Fiddle with Demo