2013-05-30 3 views
1

누군가가이 문제를 해결할 수 있습니까? 더 중요한SQl 단일 행에서 여러 행으로 데이터를 가져 오는 쿼리

처럼
select department_name,Role where Owner_ID= '1234567' or Approver_ID = '1234567' 

Department_name | Role 
------------------------- 
Dept 1   | Owner 
Dept 1   | Approver 

을 다음과 같이 내가 직원 ID를 기반으로 출력을 원하는 지금

Department_name | Owner_ID | Approver_ID 
----------------------------------------- 
Dept 1   | 1234567 | 1234567 

을 다음과 같이

나는 테이블 구조를 가지고, 나는 그것을 얻을 필요 위에 표시된 것처럼 두 개의 개별 행으로, 역할은 테이블의 열이 아니며 주어진 ID를 기준으로 승인자 또는 소유자가됩니다.

나는 이것을 얻는 방법을 알 수 없습니다. 미리 감사드립니다.

+0

있는 표에서 열 "역할"을 사용할 수 있습니까? –

+0

역할 열이 없습니다. 소유자 ID와 승인자 ID를 기반으로해야합니다. Id given = Owner_Id Role이 owner이고 id = Approver_ID 인 경우 Role이 Approver이고 Owner_ID = Approver_ID = given Id 인 경우 위와 같이 두 개의 개별 행으로 가져와야합니다. –

답변

1

운영자에게 적용 사용할 수 있습니다 http://sqlfiddle.com/#!6/f13c9/5/0

SELECT 
    Department_name, 
    'Owner' 
FROM test 
WHERE Owner_ID = 1234567 

UNION ALL 

SELECT 
    Department_name, 
    'Approver' 
FROM test 
WHERE Approver_ID = 1234567 
+0

이 쿼리에서 주문을 어떻게 적용 할 수 있습니까? –

+0

@Sravan :이 경우 하위 쿼리로 사용해야합니다. http://sqlfiddle.com/#!6/fdf8f/1/0 – Wolph

+0

마지막 쿼리의 끝 부분에만'ORDER BY '를 적용 할 수 있습니다. 이 경우'WHERE Approver_ID = 1234567' 행 바로 뒤에 있습니다. –

0

또한 당신은 간단한 해결책은 노동 조합이 될 것

SELECT t.Department_name, o.Role  
FROM dbo.YourTable t 
    CROSS APPLY (
       VALUES(CASE WHEN t.Owner_ID = '1234567' THEN 'Owner' END), 
        (CASE WHEN t.Approver_ID = '1234567' THEN 'Approver' END) 
       ) o(Role) 
WHERE o.Role IS NOT NULL 
0

SELECT Department_name, TABLENAME UNPIVOT FROM 역할 을 (시도 Department_name에 대한 역할 (Owner_ID, Approver_ID)) AS 역할

+0

은 내가 어떻게 당신이 OWNER_ID –

1

이 시도하십시오 ..

SELECT Department_name, 
CASE WHEN Role = (SELECT Owner_ID FROM Department) 
THEN 'Owner' ELSE 'Approver' 
END AS Role 
FROM Department 
UNPIVOT(Role for Column1 in(Owner_ID,Approver_ID)) AS Role 
+0

을 얻을 수 있으며, 내 솔루션에서는 approver_id가 달라야합니다. approver_id를 변경하고 스크립트를 실행하십시오. –

+0

에서 달라야이 솔루션의 소유자로 역할과 승인 –

+0

당신이 owner_id 및 approver_id 모두가 같은 행에있을 것입니다 행 –

관련 문제