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 中进行查询以返回重复的行和行nombre?我的意思是两行或多行在这些列中具有相同的数据。apellido_paternoapellido_materno

我想我正在寻找与 DISTINCT 子句相反的东西

4

2 回答 2

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
于 2012-07-26T15:54:12.783 回答
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
);
于 2012-07-26T15:57:40.173 回答