2009-09-08 6 views
5

J'ai une procédure stockée loooooong qui exécute environ 15 instructions select dans différentes tables d'une base de données - j'insère tous les résultats des sélections dans une table temporaire. Cependant - cette table a des lignes qui sont exactes en double. La table temporaire ressemble à ceci:Sélection d'une ligne à partir des lignes dupliquées

DocID | VisitDate   | DocName 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
646681 | 8/26/2009 1:07:01 PM | Doc3  
263272 | 8/26/2009 1:07:01 PM | Doc4 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
1903875 | 8/26/2009 1:07:01 PM | Doc7 

Et comment je voudrais la table pour regarder la fin est comme ceci:

DocID | VisitDate   | DocName 
8245376 | 8/26/2009 1:07:01 PM | Doc1 
8245376 | 8/26/2009 1:07:01 PM | Doc2 
646681 | 8/26/2009 1:07:01 PM | Doc3  
263272 | 8/26/2009 1:07:01 PM | Doc4 
8245376 | 8/26/2009 1:07:01 PM | Doc5 
8245376 | 8/26/2009 1:07:01 PM | Doc6 
1903875 | 8/26/2009 1:07:01 PM | Doc7 

Comment puis-je retourner une seule ligne s'il y a plusieurs dupliquer les lignes et toujours retourner les lignes qui ne sont pas des doublons?

Répondre

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

Ou il manque quelque chose?

Mise à jour:

Si vous avez le contrôle sur la procédure stockée, vous pouvez réécrire afin qu'aucun doublons jamais entrer dans la table.

En supposant DocID est un PRIMARY KEY, déclarer comme tel dans la table temporaire à l'aide IGNORE_DUP_KEY:

DECLARE @temp TABLE (DocId INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON), …) 

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

Cela va sauter les doublons sur DocID

+0

INT NOT NULL PRIMARY KEY AVEC (IGNORE_DUP_KEY = ON) ... @ Quassnoi cette ligne m'a sauvé d'une erreur .. – user1947927

2

Essayez SELECT DISTINCT au lieu de SELECT. DISTINCT Le mot clé supprime la valeur dupliquée

2

Si les doublons proviennent des tables sources, effectuez une commande SELECT DISTINCT lorsque vous insérez des données dans vos tables temporaires.

Si les doublons arrivent entre les tables, il suffit de faire un SELECT DISTINCT à partir de votre table temporaire après avoir inséré toutes les lignes.

Essayer de réellement supprimer des lignes d'une table qui sont en double est un peu plus impliqué, mais ne semble pas être nécessaire ici, car vous travaillez avec une table temporaire.

0

Si vous souhaitez éliminer les doublons de la table temporaire, ou mieux encore, ne les placez pas en premier lieu, tournez plusieurs sélections vers une requête union plus grande et insérez ce résultat dans votre table temporaire.

Questions connexes