2017-10-20 1 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) 
) 

입니다. 예상 출력은

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