Sql server SQL Server-将行转换为列
我们的MSSQL数据库中有一个表,用于存储办公室人员关系数据。表结构是Sql server SQL Server-将行转换为列,sql-server,sql-server-2012,ssms,Sql Server,Sql Server 2012,Ssms,我们的MSSQL数据库中有一个表,用于存储办公室人员关系数据。表结构是 CREATE TABLE ( OfficeID UNIQUEIDENTIFIER PersonID UNIQUEIDENTIFIER Designation VARCHAR(20) ) 这张桌子有价值 E1F5ECA9-7D5A-4580-AA7D-0003A582F286|E1F5ECA9-7D5A-3580-AA7D-0003A582F286|Manager E1F5ECA9-7
CREATE TABLE (
OfficeID UNIQUEIDENTIFIER
PersonID UNIQUEIDENTIFIER
Designation VARCHAR(20)
)
这张桌子有价值
E1F5ECA9-7D5A-4580-AA7D-0003A582F286|E1F5ECA9-7D5A-3580-AA7D-0003A582F286|Manager
E1F5ECA9-7D5A-4580-AA7D-0003A582F286|E1F5ECA9-7D5A-3580-AA7D-0003A582F286|Engineer
E2F5ECA9-7D5A-4580-AA7D-0003A582F286|E2F5ECA9-7D5A-3580-AA7D-0003A582F286|Manager
E2F5ECA9-7D5A-4580-AA7D-0003A582F286|E2F5ECA9-7D5A-3580-AA7D-0003A582F286|Engineer
我想得到的是,每个办公室只能有一名经理和一名工程师。我期望的结果是
OfficeID|Manager ID| Engineer ID|
E1F5ECA9-7D5A-4580-AA7D-0003A582F286|E1F5ECA9-7D5A-3580-AA7D-0003A582F286| E1F5ECA9-7D5A-3580-AA7D-0003A582F286
E2F5ECA9-7D5A-4580-AA7D-0003A582F286|E2F5ECA9-7D5A-3580-AA7D-0003A582F286|E2F5ECA9-7D5A-3580-AA7D-0003A582F286
如何形成查询以获取此格式的数据
问候,
John使用条件聚合:
select
OfficeId
, ManagerId = max(case when Designation = 'Manager' then PersonId end)
, EngineerId = max(case when Designation = 'Engineer' then PersonId end)
from t
group by OfficeId
或者使用pivot()
:
rextester演示:可能重复的
select
OfficeId
, ManagerId = Manager
, EngineerId = Engineer
from t
pivot (max(PersonId) for Designation in ([Manager],[Engineer])) p