2016-01-19 2 views
0

Comment puis-je sélectionner une paire de valeurs dans ma table si une valeur est égale à une autre avec une sous-chaîne concaténée? J'ai une table SQL Server qui contient des cartes de balayage de bibliothèque, une maquette est montrée ici.SQL Server Sélectionner les paires de valeurs de la table si la paire de valeurs existe (définie par une sous-chaîne)

Name   Status   Activation_Date 
John_Doe  Active   1-1-2015 
Jane_Smith  Inactive  2-2-2014 
Jane_Smith_1 Active   1-2-2015 

Dans ce tableau, lorsqu'un patron perd son/sa carte, l'ancienne carte est désactivée et une nouvelle carte est créée. Le nom est la clé primaire, donc depuis que la clé précédente est utilisée, un suffixe "_1" est ajouté.

Je voudrais que mes résultats montrent l'enregistrement pour "Jane_Smith" et aussi "Jane_Smith_1".

+4

Ceci est très pauvre conception de schéma. Que se passe-t-il quand vous avez un «John Smith» et un «John Smithson», où un vrai nom correspond à l'autre d'un individu différent? –

+3

Ou encore plus ridicule ce qui se passe quand vous avez John Smith et une autre personne qui a le même nom obtient une carte? Est-ce que ça devient John_Smith_1? Comment savez-vous que ce n'est pas le même John Smith? –

+2

Et que se passe-t-il si Jhon perd sa carte 10 fois? le tri par chaîne devient fou. –

Répondre

0

Si vous essayez de retourner une liste de toutes les lignes où il existe une autre ligne de la table qui correspond au nom mais pour le _1, que diriez-vous quelque chose comme ceci:

SELECT * 
FROM YourTable A 
WHERE EXISTS (
    SELECT 1 
    FROM YourTable 
    WHERE REPLACE(Name,'_1','') = REPLACE(A.Name,'_1','') 
     AND Name <> A.Name 
) 
+0

Merci Benjamin! C'est exactement ce que je voulais. Fonctionne très bien! – leskeld2