2017-10-20 7 views
1

Wir haben eine Tabelle in unserer MSSQL-Datenbank, in der Daten zu Office-Person-Relationen gespeichert sind. Die Tabellenstruktur istSQL Server - Zeilen in Spalten transponieren

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

Der Tabellenwert

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 

Was will ich jedes Büro bekommen haben wird, ist nur einen Manager und einen Ingenieur haben kann. Die Ausgabe, die ich erwarte, ist

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 

Wie kann ich die Abfrage für das Abrufen der Daten in diesem Format bilden?

Grüße,

John

+0

Mögliches Duplikat von [Zeilen in Spalten umwandeln in MS SQL] (https://stackoverflow.com/questions/35451934/convert-rows-to-columns-in-ms-sql) –

Antwort

1

bedingte Aggregation mit:

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 

oder mit pivot():

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

rextester Demo: http://rextester.com/OTFBIS66929

Verwandte Themen