简体   繁体   English

SQL Server - 将行转换为列

[英]SQL Server - Transposing Rows to Columns

We have a table in our MSSQL database, that store Office Person relation ship data.我们的 MSSQL 数据库中有一个表,用于存储 Office Person 关系数据。 The table structure is表结构是

CREATE TABLE (
    OfficeID UNIQUEIDENTIFIER
    PersonID UNIQUEIDENTIFIER
    Designation VARCHAR(20)
)

The table will have value该表将有价值

    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

What I want to get is each office can have only one Manager and one Engineer.我想得到的是每个办公室只能有一名经理和一名工程师。 The output I am expecting is我期待的输出是

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

How can i form the query for getting the data in this format?我如何形成查询以获取这种格式的数据?

Regards,问候,

John约翰

using conditional aggregation:使用条件聚合:

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

or using pivot() :或使用pivot()

select
    OfficeId
  , ManagerId = Manager
  , EngineerId = Engineer
from t
pivot (max(PersonId) for Designation in ([Manager],[Engineer])) p

rextester demo: http://rextester.com/OTFBIS66929 reextester 演示: http ://rextester.com/OTFBIS66929

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM