0
votes

Corde spécifique correspondante

Je travaille dans SQL Server 2012. Dans ma table, il existe une colonne appelée st_num code> et ses données sont comme ceci: xxx pré>

Nous pouvons remarquer maintenant qu'il existe des variations d'orthographe dans les données ci-dessus. Ce que je voudrais faire, c'est que si le nombre dans ce cas 128 et les 3 premières lettres dans st_num code> sont identiques, alors ces deux lignes doivent être considérées comme si elles sont identiques telles que la sortie doit être la suivante: p >

St_Num                status
-----------------------------
128 TIMBER RUN DR     EXP


1 commentaires

La standardisation des adresses est plus impliquée que l'on peut penser. Jetez un coup d'œil à Stackoverflow.com/cetions / 41249742 / ...


5 Réponses :


1
votes

Cela pourrait éventuellement être fait en utilisant une sous-requête de la même manière que vous éliminez les doublons dans une table de sorte que:

SELECT Str_Num, status
FROM <your_table> a
WHERE NOT EXISTS (SELECT 1
FROM <your_table> b
WHERE SUBSTRING(b.Str_Num, 1, 7) = SUBSTRING(a.Str_Num, 1, 7));


0 commentaires

1
votes

Cela produira uniquement la première des lignes correspondantes: xxx

Voir le Demo


7 commentaires

Cela échouera s'il y a une "colline de 128 lignes" ou d'autres noms ressemblant ou s'il y a une erreur d'orthographe comme "128 Tmber Run Dr"


Si le numéro dans ce cas 128 et les 3 premières lettres de la colonne ST_NUM sont identiques, ces deux rangées doivent être considérées comme étant les mêmes c'est l'exigence.


@Zain ul Abidin: Si cette exigence n'est utilisée que pour renvoyer des données, c'est bon, mais cela conduira à une catastrophe si vous l'utilisez dans une déclaration de mise à jour pour standardiser les adresses.


@forpas ce dont j'ai besoin, c'est que lorsque la première fois la requête passe à travers 123 Timber Run Dr puis lors de la colonne ST_NUM, il se passe à nouveau à Thorugh un champ 123 Timber Run Drive, alors il devrait vérifier que si 123 Tim correspondent, alors ne faites pas Affichez cet enregistrement mais montrez le premier uniquement.


@Zainulabidin Y a-t-il une colonne comme une carte d'identité (entier automatique) qui servirait d'ordre des rangées?


@ forpas non désolé il n'y a pas de colonne d'identification mais comment cela servira le but ici, s'il vous plaît?


S'il y a un identifiant entier, la commande est évidente et la ligne qui sera choisie comme la sortie parmi les correspondances correspondantes est celle avec l'ID minimum.



1
votes

Vous pouvez utiliser le regroupement par Statut CODE> et SUBSTRING (ST_NUM, 1,3) CODE>

with t(St_Num, status) as
(
 select '128 TIMBER RUN DR'   ,'EXP' union all
 select '128 TIMBER RUN DRIVE','EXP'   
) 
select min(St_Num) as St_Num, status
  from t    
 group by status, substring(St_Num,1,3);

St_Num              status
-----------------   ------
128 TIMBER RUN DR   EXP


0 commentaires

1
votes

Je n'approuve pas vraiment votre logique correspondante. . . Mais ce n'est pas votre question. Le gros problème est de savoir combien de temps dure le numéro avant la chaîne. Donc, vous pouvez obtenir la plus courte des adresses à l'aide de: xxx


0 commentaires

0
votes

J'ai toujours un sentiment étrange que vos critères ne suffisent pas pour correspondre aux mêmes adresses, mais cela pourrait aider, car elle considère également la longueur du nombre: xxx


0 commentaires