2017-10-03 1 views
2

Je dois écrire une déclaration de cas basée sur les 3 tables de telle sorte que si la colonne 1 de la table A est vide alors chercher la colonne 2 de la table B et si la colonne 2 est vide alors chercher la colonne 3 du tableau CDéclaration de cas Basé sur 3 tables MSSQL

TableA 
Column 1a Column 1 
1   

TableB 
Column 1a Column 2 
1   

TableC 
Column 1a Column 3 
    1   A 

Si je devais le tableau A et B-à-dire deux tables, je l'aurais écrit quelque chose comme: -

Case when Column A = '' or Column A is null then Column B 
else Column A 
from tableA a 
Left join TableB b on a.column 1a = b.column 1a 

Mais je ne suis pas sûr comment inclure la déclaration 3 colonnes cas. Appréciez l'aide!

+0

Je pense que ce sera plus facile si vous tournez autour de: 'cas où COLUMNA <> ' 'et columnA n'est pas null que columnA etc.' – HoneyBadger

+0

pouvez-vous trier vos noms de colonne car il n'est pas clair comme il se présente. vous avez la colonne A dans votre cas, mais pas de colonne A dans vos définitions – Tanner

Répondre

3

Vous pouvez utiliser coalesce() avec nullif() comme ceci:

select 
    a.Column1a 
    , Value = coalesce(nullif(a.Column1,''),nullif(b.Column2,''),c.Column3) 
from TableA a 
    left join TableB b 
    on a.Column1a = b.Column1a 
    left join TableC c 
    on a.Column1a = c.Column1a 

coalesce() retournera le premier non null valeur des paramètres et nullif(...,'') retournerez null au lieu d'une chaîne vide ''.

ce qui équivaut à:

select 
    a.Column1a 
    , Value = case when a.Column1 is not null and a.Column1 <> '' then a.Column1 
       when b.Column2 is not null and b.Column2 <> '' then b.Column2 
       else c.Column3 
       end 
from TableA a 
    left join TableB b 
    on a.Column1a = b.Column1a 
    left join TableC c 
    on a.Column1a = c.Column1a 
2

Vous pouvez imbriquer vos CASE déclarations comme ceci:

CASE 
    WHEN ColumnA = '' OR ColumnA IS NULL 
     THEN 
      CASE 
       WHEN ColumnB = '' OR ColumnB IS NULL 
        THEN ColumnC 
       ELSE ColumnB 
      END 
    ELSE ColumnA 
END