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

Comment signer la connexion OKEx API version 5 avec websockets ?

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"