2017-08-15 2 views
2

J'utilise SQL Server 2012 et je dois écrire une requête qui ne me donne le résultat suivant:Comment écrire une requête T-SQL qui produirait 1 si la valeur dans une colonne dans le tableau A correspond à la valeur dans une colonne dans le tableau B, 0 sinon?

Code  Value 
FRBAR  0 
ENSPA  1 
DEWINE  1 
    ... 

Pour atteindre ce qui précède, je travaille avec 2 tables spécifiques dans ma base de données, à savoir le tableau A et le Tableau B. Le Tableau A a une colonne appelée CodeA et le Tableau B a une colonne appelée CodeB.

Je veux écrire une requête T-SQL qui correspondrait à toutes les valeurs de la colonne CodeA avec celles de la colonne CodeB et sortirait le résultat que j'ai mentionné ci-dessus.

Je sais que je dois faire un JOIN sur ces 2 colonnes mais je suis confus sur la façon d'implémenter la logique de retourner un 1 s'il y a une correspondance et un 0 sinon.

Répondre

3

Vous devez utiliser un FULL OUTER JOIN:

SELECT CASE 
      WHEN CodeA IS NOT NULL THEN CodeA 
      ELSE CodeB 
     END AS Code, 
     CASE 
      WHEN CodeA IS NOT NULL AND CodeB IS NOT NULL THEN 0 
      ELSE 1 
     END AS Value 
FROM TableA 
FULL OUTER JOIN TableB ON CodeA = CodeB 

S'il y a un correspondant à la requête de sortie 1 comme Value. Sinon, la requête affichera 0 avec la valeur de code non nulle.

Note: L'utilisation d'unLEFT JOIN vérifiera dans une seule direction, à savoir que pour les codes dans une table qui n'existent pas dans l'autre table. Si vous voulez vérifier dans les deux directions, alors vous devez utiliser un FULL JOIN.

1

Vous devez utiliser LEFT OUTER JOIN pour prendre tous les enregistrements de TableA même alors il n'y a aucun enregistrement correspondant de TableB puis utiliser la structure case-when-else se fondant sur l'absence (contrôle is NULL) de TableB partie du dossier résultant.

select TableA.CodeA Code, 
case when 
TableB.CodeB is null then 0 
else 1 
end Value 
from TableA left outer join TableB on TableA.CodeA = TableB.CodeB 
0

Utilisez LEFT JOIN. Cela correspondra aux deux tables sur la colonne Code et renverra NULL s'il n'y a pas de correspondance. Vous pouvez ensuite utiliser CASE pour renvoyer 0 ou 1 en conséquence.

0

J'utiliser CASE et LEFT JOIN

SELECT A.codeA code, 
     CASE WHEN B.codeB IS NULL THEN 0 ELSE 1 END 
FROM A 
LEFT JOIN B ON A.codeA = B.codeB