2012-07-26 18 views
0

相同的數據返回行我有以下模式其中有三列

CREATE TABLE [dbo].[personas](
    [id_persona] [int] IDENTITY(1,1) NOT NULL, 
    [nombres] [nvarchar](50) NOT NULL, 
    [apellido_paterno] [nvarchar](50) NULL, 
    [apellido_materno] [nvarchar](50) NULL, 
    [fecha_nacimiento] [date] NOT NULL, 
    [sexo] [varchar](1) NOT NULL, 
    [estado_civil] [nvarchar](50) NOT NULL, 
    [calle] [nvarchar](200) NULL, 
    [colonia] [nvarchar](100) NULL, 
    [codigo_postal] [char](5) NOT NULL, 
    [telefonos] [varchar](50) NULL, 
    [celular] [varchar](25) NULL, 
    [email] [varchar](50) NULL, 
) 

表我如何在SQL Server查詢返回那裏​​,apellido_paternoapellido_materno重複行?我的意思是兩列或更多行在這些列中具有相同的數據。

我想我期待相反的東西DISTINCT子句

+0

一個辦法是減去從總組不同。但那不是有效的! – nawfal 2012-07-26 15:49:28

+0

是的,但後來我怎麼得到哪些行是重複的? – 2012-07-26 15:51:22

+0

您是否在查找具有重複'nombre','apellido_paterno'和'apellido_materno'值的記錄? – 2012-07-26 15:51:32

回答

5

你想......

SELECT nombre, apellido_paterno, apellido_materno 
    FROM dbo.personas 
GROUP BY nombre, apellido_paterno, apellido_materno 
HAVING COUNT(*) > 1 

如果你想看看實際的行,然後用它作爲內部查詢,加入到它。所以,像

SELECT * 
    FROM personas pOuter INNER JOIN 
    (SELECT nombre, apellido_paterno, apellido_materno 
     FROM dbo.personas 
    GROUP BY nombre, apellido_paterno, apellido_materno 
    HAVING COUNT(*) > 1) pInner 
    ON pInner.nombre = pOuter.nombre 
    AND pInner.apellido_paterno = pOuter.apellido_paterno 
    AND pInner.apellido_materno = pOuter.apellido_materno 
+0

完美,謝謝 – 2012-07-26 16:09:42

3
;WITH x AS 
(
    SELECT id_personas, rn = ROW_NUMBER() OVER 
    (
    PARTITION BY nombre, apellido_paterno, apellido_materno 
    ORDER BY id_personas 
) 
    FROM dbo.personas 
) 
SELECT <col list> 
FROM dbo.personas AS p 
WHERE EXISTS 
(
    SELECT 1 FROM x 
    WHERE x.id_personas = p.id_personas 
    AND x.rn > 1 
); 
+0

我有兩個懷疑你的答案,做和x.rn是什麼意思? – 2012-07-26 16:17:38

+0

@Jorge 是您在輸出中實際需要的任何列的佔位符。這可能是所有列,但列出它們比使用SELECT *更好。 x.rn指的是在CTE中建立的ROW_NUMBER()。用*替換並嘗試。 – 2012-07-26 16:18:49

+0

哦,我明白了,非常好的答案。我只是想知道哪個答案有更好的表現,我想我會嘗試一旦我的數據庫更多人口。謝謝你的時間 – 2012-07-26 16:32:19

相關問題