2017-10-20 169 views
1

我們在MSSQL數據庫中有一張表,用於存儲Office Person關係數據。表結構是SQL Server - 將行轉移到列

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 

如何形成查詢以獲取此格式的數據?

問候,

約翰

+0

[將行轉換爲MS SQL中的列]的可能重複(https://stackoverflow.com/questions/35451934/convert-rows-to-columns-in-ms-sql) –

回答

1

使用條件彙總:

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()

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

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