2017-10-20 38 views
1

Nous avons une table dans notre base de données MSSQL, qui stocke les données de relation de personne à Office. La structure de la table estSQL Server - Transposition de lignes à des colonnes

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

Le tableau aura une valeur

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 

Ce que je veux est chaque bureau peut posséder qu'un seul gestionnaire et un ingénieur. La sortie J'attends est

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 

Comment puis-je former la requête pour obtenir les données dans ce format?

Cordialement,

John

+0

Copie possible de [Convertir des lignes en colonnes dans MS SQL] (https://stackoverflow.com/questions/35451934/convert-rows-to-columns-in-ms-sql) –

Répondre

1

utilisant l'agrégation conditionnelle:

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 

ou en utilisant pivot():

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

rextester démonstration: http://rextester.com/OTFBIS66929