2017-01-06 8 views
0

왼쪽 테이블의 특정 열을 재정의 가입 표 2
SQL 내가 즉 두 개의 테이블이

custId--custName--custAge 
c1--c1name--32 
c2--c2name--41 
c3--c3name--41 

표 2

custId--verified--custName 
c1--Y--c1FullName 
c2--N--c2FullName 

내가 필요 Table1과 Table2를 합치면, 검증 된 열이 Y 테이블 2, Table1 대신 Table2에서 custName이 필요합니다.
그래서, 원하는 출력은 다음과 같습니다 나는 적절한 결과를 제공하지 않는 다음 쿼리를 썼다

custId--custName--custAge 
c1--c1FullName--32 
c2--c2name--41 
c3--c3name--41 

(확인 열이 Y가 custId위한 경우 표 2에서 덮어 쓰기 CUSTNAME 열). 도와주세요. 이

select T1.custId, NVL(T2.custName, T1.custName),T1.custAge 
from Table1 T1 
left join Table2 T2 on T1.custId=T2.custId and T2.verified='Y' 
+2

태그 적절한 RDMS. – Viki888

+0

['NVL'] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm)은 Oracle에서 사용할 수 있으므로 RDBMS는 Oracle – Arulkumar

답변

4

당신은 달성하기 위해 CASE 문을 사용할 수 있습니다 :

SELECT  tab1.custId, 
      CASE 
       WHEN (tab2.verified = 'Y') 
       THEN tab2.custName 
       ELSE tab1.custName 
      END AS CustName, 
      tab1.custAge 

FROM  Table1 tab1 
LEFT JOIN Table2 tab2 ON tab1.custId = tab2.custId 

는 여기를 참조하십시오 -이 바이올린은SQL Server에 내장되어 있습니다>http://rextester.com/EVOMK25746 (을하지만, 쿼리는Oracle에서 작동해야 데이터베이스도)

희망이 있습니다!

+0

입니다. 그것은 작동했습니다 :-) – ITQuest

1

번이 쿼리 ..

select * into #tab1 from 
(
select 'c1' custId,'c1name' custName,31 custAge 
union all 
select 'c2' ,'c2name' ,41 
union all 
select 'c3' ,'c3name' ,41 

) as a 

select * into #tab2 from 
(
select 'c1' custId,'Y'verified,'c1FullName' custName 
UNION ALL 
SELECT 'c2','N','c2FullName ' 
) as a 

SELECT T1.custId,CASE WHEN T2.verified='Y' THEN T2.custName ELSE T1.custName END AS CUSTNAME,T1.custAge FROM #tab1 T1 
LEFT JOIN #tab2 T2 ON T1.custId=T2.custId 
0
select custId, custName, custAge 
    from Table1 
     natural join 
     (select custId 
      from Table2 
      where verified='N') t2 
union 
select custId, custName, custAge 
    from (select custId, custAge from Table1) t1 
     natural join 
     (select custId, custName 
      from Table2 
      where verified='Y') t2;