首页 > 解决方案 > SQL Server 重复项 - 删除值

问题描述

我一直在疯狂尝试从我的 SQL Server 数据库中删除重复值。一次查询有效,然后就无效了。据说这个查询删除了重复,但查询时没有。这是表结构:

CREATE TABLE [dbo].[Location](
    [ID] [int] NOT NULL,
    [FullName] [nvarchar](255) NULL,
    [BarCode] [nvarchar](255) NULL,
    [Alias] [nvarchar](255) NULL,
    [StreetAddress] [nvarchar](255) NULL,
    [City] [nvarchar](255) NULL,
    [State] [nvarchar](255) NULL,
    [ZipCode] [nvarchar](255) NULL,
    [ArchiveDate] [datetime] NULL DEFAULT (getdate()),
PRIMARY KEY CLUSTERED 
(
    [ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

这是我用来删除重复项的查询:

WITH CTE([FullName], 
        [BarCode],
        [Alias],
        [StreetAddress],
        [City],
        [State],
        [ZipCode],
      --    [ArchiveDate],   
    DuplicateCount)
AS (SELECT [FullName], 
           [BarCode],
           [Alias],
           [StreetAddress],
           [City],
           [State],
           [ZipCode],
          -- [ArchiveDate],
           ROW_NUMBER() OVER(PARTITION BY [FullName], 
                            [BarCode],
                        [Alias],`enter code here`
                        [StreetAddress],
                        [City],
                        [State],
                        [ZipCode]
                        --[ArchiveDate]                           
                                        
           ORDER BY ID) AS DuplicateCount
    FROM [TelusArchive].[dbo].[Location])
DELETE FROM CTE
WHERE DuplicateCount > 1;

它不会删除重复项。我究竟做错了什么..

谢谢您的帮助...

标签: sqlsql-server

解决方案


您的问题表明,您可能认为重复的任何内容都不是。我将从查询开始:

SELECT [FullName], [BarCode], [Alias], [StreetAddress], [City], [State], [ZipCode], COUNT(*)
FROM location
GROUP BY [FullName], [BarCode], [Alias], [StreetAddress], [City], [State], [ZipCode]
HAVING COUNT(*) > 1

根据您的问题,这应该不返回任何行。

然后,不清楚问题出在哪里——如果你真的认为有重复。

我建议一次删除一列,直到您开始重复。然后您可以调查列中的值。一个常见的罪魁祸首是看起来相同但不同的字符串——比如由于空格或字符看起来相同但不同。


推荐阅读