2009-09-08 53 views
5

Tengo un procedimiento almacenado loooooong que ejecuta unas 15 sentencias select en diferentes tablas de una base de datos. Estoy insertando todos los resultados de las selecciones en una tabla temporal. Sin embargo, esa tabla tiene algunas filas que son duplicados exactos. La tabla temporal se ve algo como esto:Seleccionar una fila de filas duplicadas

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 

Y cómo me gustaría la mesa para mirar al final es la siguiente:

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 

¿Cómo puedo devolver sólo una fila si hay múltiples duplicar filas y todavía devolver las filas que no son duplicados?

Respuesta

9
SELECT DISTINCT DocID, VisitDate, DocName 
FROM mytable 

O ¿Falta algo?

Actualización:

Si usted tiene control sobre el procedimiento almacenado, puede volver a escribir de modo que no hay duplicados alguna vez entrar en la tabla.

Suponiendo DocID es una PRIMARY KEY, la declara como tal en la tabla temporal utilizando IGNORE_DUP_KEY:

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

INSERT 
INTO @mytable 
SELECT … 
FROM source_table 

Esto saltará duplicados en DocID

+0

INT NOT NULL CLAVE PRINCIPAL CON (IGNORE_DUP_KEY = ON) ... @ Quassnoi esta línea me salvó de un error ... – user1947927

2

Trate SELECT DISTINCT en lugar de SELECT. DISTINCT palabra clave eliminará el valor duplicado

2

Si los duplicados provienen de las tablas de origen, realice SELECCIONAR DISTINCT cuando realice una inserción en sus tablas temporales.

Si los duplicados son en las tablas, haga una SELECCIÓN DE DISTINCIÓN desde su tabla temporal después de haber insertado todas las filas.

tratando de realmente eliminar filas de una tabla que son duplicadas es un poco más complicado, pero no parece ser necesario aquí, porque está trabajando con una tabla temporal.

0

Si desea eliminar los duplicados de la tabla temporal o mejor aún, no los ponga allí en primer lugar, convierta múltiples selecciones en una consulta de unión más grande e inserte ese resultado en su tabla temporal.

Cuestiones relacionadas