2017-10-20 12 views
1

MSSQLデータベースには、Office Personリレーションシップ・データを格納するテーブルがあります。テーブル構造は、テーブルには、私が取得したいどのような値SQL Server - 行の列への転記

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 

を持つことになります

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

、各事業所が唯一のマネージャと1人のエンジニアを持つことができます。私が期待している出力は

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 

どのように私はこの形式でデータを取得するためのクエリを形成できますか?

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()を使用:条件集合を使用して

よろしく、

ジョン

+0

[MS SQLの行を列に変換]の可能な複製(https://stackoverflow.com/questions/35451934/convert-rows-to-columns-in-ms-sql) –

答えて

1

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

rextesterデモ:http://rextester.com/OTFBIS66929