2017-01-06 3 views
0

J'ai deux tables à savoir Tableau 1 et Tableau2
Tableau 1JOIN SQL pour remplacer colonne particulière de la table de gauche

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

Tableau 2

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

Je dois joindre Table1 et Table2, de sorte que si la colonne vérifiée est Y dans tableau 2, j'ai besoin de custName de Table2 au lieu de Table1.
Ainsi, la sortie souhaitée est la suivante: (colonne de NOMCLI écrasement de Table2 si la colonne est vérifié Y pour que CustID)

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

I écrit requête suivante, qui ne donne pas de bon résultat. S'il vous plaît aider.

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

Tag SGBDR appropriée. – Viki888

+0

['NVL'] (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions105.htm) est disponible dans Oracle, de sorte que le SGBDR est Oracle – Arulkumar

Répondre

4

Vous pouvez utiliser une instruction CASE pour y parvenir:

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 

Voir ce ici ->http://rextester.com/EVOMK25746 (Ce violon est construit surSQL Server, cependant, la requête doit travailler surOraclebases de données ainsi)

Espérons que cela aide !!!

+0

merci beaucoup. Ça a marché :-) – ITQuest

1

Essayez cette requête une fois ..

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;