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

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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

Le shell POSIX (sh) redirige stderr vers stdout et capture stderr et stdout dans des variables