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 FileTable
comme 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 FileNameAct
et FileNameString
et 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
Enregistrer un commentaire