SQL : faites correspondre deux colonnes contenant des valeurs et des chaînes NULL et extrayez uniquement les lignes correspondantes sans NULL

J'ai une table temporaire FileTablecomme suit:

 ID FileNameAct  FileNameString
1 NULL SalesOrderTarget
2 NULL SalesTarget
3 InventoryMaterialTarget_20220414.xlsx NULL
4 InventoryTarget_20220414.xlsx NULL
5 SalesOrderTarget_20220412.xlsx NULL
6 SalesTarget_20220412.xlsx NULL

Objectif : faire correspondre la chaîne entre FileNameActet FileNameStringet supprimer les lignes qui correspondent très étroitement.

Ainsi, le tableau résultant devrait ressembler à ci-dessous :

ID FileNameAct  FileNameString
1 SalesOrderTarget_20220412.xlsx SalesOrderTarget
2 SalesTarget_20220412.xlsx SalesTarget

Je pense à la ligne ci-dessous:

 SELECT X.* FROM (SELECT FileNameAct, FileNameString, 
CASE WHEN ISNULL(FileNameAct,'') LIKE '%'+ ISNULL(FileNameString,'') + '%' THEN 1 ELSE 0
END AS Flag
FROM @FileTable) X
WHERE X.Flag=1

De toute évidence, cela ne donnerait pas le bon résultat.

Quelqu'un peut-il partager des pensées?


Solution du problème

Vous pouvez utiliser une auto-jointure avec des conditions

Select 
b.id,
a.FileNameAct,
b.FileNameString
From @FileTable a
Join @FileTable b
On a.FileNameAct
like concat(b.FileNameString,'%')
Where b.FileNameString is not null;

Commentaires

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"