2010-07-30 3 views
4

난처한 상황에 빠진거야 다음 job_num는 고유 번호SQL 간단한 가입하고 난 열이있는 테이블이

그리고 HM_PH, BUS_PHCALL1ST 열이 10 개 자리 전화 번호입니다에게 있습니다

JOB_NUM, HM_PH, BUS_PH, CALL1ST 

JOB_NUM, HM_PH,  BUS_PH,  CALL1ST 
------------------------------------ 
12345, 4025557848, 9165897588, 7518884455 
10101, 8887776655, 8667416895, 5558884446 
:

그래서 위의 열 순서를 사용하여, 샘플 데이터는 같을 것이다

내가 만들고 싶은 것은 2 열입니다.

JOB_NUM PHONE 
--------------------- 
12345 4025557848 
12345 9165897588 
12345 7518884455 
10101 8887776655 
10101 8667416895 
10101 5558884446 

어디에서 시작을 수행하십시오 job_num 같은 모든 전화 번호 옆에 표시됩니다

JOB_NUM, PHONE 

?

SELECT JOB_NUM, HM_PH AS PHONE FROM yourtable 
UNION 
SELECT JOB_NUM, BUS_PH FROM yourtable 
UNION 
SELECT JOB_NUM, CALL1ST FROM yourtable 
ORDER BY JOB_NUM 
+0

@OMG은 내가 바로 당신의 맨 위에 내 개정을 삭제하기 전에 확인을 두 번 기뻐요. ;) – ahsteele

+0

@ahsteele : 어쨌든 개정판이 있습니다. 항상 롤백 할 수 있습니다.) – Tim

답변

10

당신은 UNION 필요 또는 UNION 당신은 고유의 행을 필요로 할 때 :

select JOB_NUM,HM_PH AS PHONE 
from YourTableName 
union all 
select JOB_NUM,BUS_PH AS PHONE 
from YourTableName 
union all 
select JOB_NUM,CALL1ST_PH AS PHONE 
from YourTableName 
+2

+1 - 끝에 "ORDER BY JOB_NUM"을 추가하십시오. – JNK

+6

@CodingIsAwesome :'UNION'이 중복을 제거한다는 사실을 염두에 두십시오; 'UNION ALL'은 그렇게하지 않을 것이고, 더 빨리 할 수 ​​있습니다. –

+0

@OMG 조랑말 : +1 좋은 지적. 추가됨. @ JNK : 너무 고마워. –

2

는 (중복 포함) 모두 당신이 필요로하는 모든 번호에 대한 UNION합니다 (중복 행을 유지하려는 경우) 또는 UNION의 ALL (중복 행을 제거 할 경우)

0
create table yourtable 
(
    id int, 
    HM_PH nvarchar(10), 
    BUS_PH nvarchar(10), 
    CALL1ST nvarchar(10) 
) 


insert into yourtable 
select 12345, 4025557848, 9165897588, 7518884455 
union 
select 10101, 8887776655, 8667416895, 5558884446 



select * from yourtable 

select ID,p.Phone 
from temptemp 
unpivot(Phone for phoneCol in (HM_PH,BUS_PH,CALL1ST)) p 
order by id 

drop table yourtable 
관련 문제