2012-11-30 3 views
1

person (id, phonetype, phonenumber), phonetype (id, txtDisplay)의 두 테이블이 있습니다. 예를 들어한 테이블의 데이터를 열로 사용하여 두 테이블을 하나의 테이블로 결합하는 방법은 무엇입니까?

Phonetye

Id txtDisplay 
1 Home Phone 
2 Work Phone 
3 Mobile Phone 

사람

Id phonetype phonenumber 
0001 1  6310001111 
0001 2  6310001112 
0002 3  5160002113 
0003 2  7180003112 

결과 테이블은

Id home_phone work_phone mobile_phone 
0001 6310001111 6310001112 
0002     5160002113 
0003   7180003112 

가 어떻게이에 대한 쿼리를 작성하려면 어떻게해야합니까해야 하는가?

+0

RDBMS는 무엇입니까 ?? –

+3

@MahmoudGamal, 'sql'이라는 질문에 태그를 지정하면 Microsoft SQL Server에 대해 언급하는 것으로 가정합니다. Microsoft는 범용 단어가 항상 해당 제품을 나타내는 척하는 것을 좋아합니다. Cf. Microsoft Word, Microsoft Windows, Microsoft Money. :-) –

+0

@BillKarwin - 흥미롭게도 많은 사용자가이 문제에 빠져 있습니다. [여기에 샘플 하나 있습니다] (http://stackoverflow.com/questions/13685394/sql-dynamic-date-comparison#comment18788200_13685394) –

답변

3

이미 모든 전화 유형을 알고있는 경우에만 작동합니다 : SQL에서

SELECT 
    id, 
    max(case when phonetype=1 then phonenumber end) as home_phone, 
    max(case when phonetype=2 then phonenumber end) as work_phone, 
    max(case when phonetype=3 then phonenumber end) as mobile_phone 
FROM Person 
GROUP BY id 
2

은 열 이름은 쿼리 구문 분석 할 때 알고 있어야합니다. 찾은 데이터에 따라 열 수를 자동으로 확장하는 쿼리를 작성할 수 없습니다.

당신은, 그러나 두 개의 쿼리를 수행 할 수 있습니다

  1. 첫째, 당신의 PHONETYPE 테이블의 모든 고유 한 전화 번호 형식을 가져옵니다.

  2. 둘째, 별개의 전화 번호 유형을 가진만큼의 열을 추가 할 수있는 코드를 작성하십시오.

Microsoft SQL Server는 이러한 유형의 쿼리 조금을 위해 도움이 PIVOT 작업을 지원하지만 당신은 여전히 ​​당신이 열을하고자하는 모든 고유 값을 알고 있어야합니다. 따라서 위의 2 단계 프로세스는 Microsoft뿐만 아니라 다른 SQL 구현에도 적용됩니다.

관련 문제