Sql 如何在试图索引的表的列中找到重复的值?

Sql 如何在试图索引的表的列中找到重复的值?,sql,sql-server,Sql,Sql Server,我有这个DDL: CREATE TABLE [dbo].[FreqLeeds] ( [Id] INT NOT NULL, [Freq] DECIMAL (18, 5) NOT NULL, [Text] NVARCHAR (50) NULL, PRIMARY KEY CLUSTERED ([Id] ASC) ); 填充表后,我尝试创建索引: CREATE UNIQUE INDEX [IX_FreqLeeds_Text] ON [db

我有这个DDL:

CREATE TABLE [dbo].[FreqLeeds] (
    [Id]   INT             NOT NULL,
    [Freq] DECIMAL (18, 5) NOT NULL,
    [Text] NVARCHAR (50)   NULL,
    PRIMARY KEY CLUSTERED ([Id] ASC)
);
填充表后,我尝试创建索引:

CREATE UNIQUE INDEX [IX_FreqLeeds_Text] ON [dbo].[FreqLeeds] ([Text])
但是由于重复的值,
创建
失败


如何确定哪些行有重复项以及值是多少?

使用聚合可以找到多次出现的文本:

select [Text]
from [dbo].[FreqLeeds]
group by [Text]
having count(*) > 1
如果要查看多次出现的文本的所有行(包括所有列),可以在子查询(或CTE)中使用窗口函数
count
,并进行筛选:

select *
from (
    select 
        t.*,
        count(*) over (partition by [Text]) cnt
    from [dbo].[FreqLeeds] t
) t where cnt > 1;

您可以使用聚合查找多次出现的文本:

select [Text]
from [dbo].[FreqLeeds]
group by [Text]
having count(*) > 1
如果要查看多次出现的文本的所有行(包括所有列),可以在子查询(或CTE)中使用窗口函数
count
,并进行筛选:

select *
from (
    select 
        t.*,
        count(*) over (partition by [Text]) cnt
    from [dbo].[FreqLeeds] t
) t where cnt > 1;

您可以尝试用这种方式查询表

Select count(*), [Text]
from [dbo].[FreqLeeds]
group by [Text]
having count(*) > 1

您可以尝试用这种方式查询表

Select count(*), [Text]
from [dbo].[FreqLeeds]
group by [Text]
having count(*) > 1

谢谢这很有效。现在我必须找到一种方法来移除这些。可能会引发另一个问题。或者你可以先自己尝试一下(比如学习一些SQL,或者用另一种语言编写一个简单的程序),为什么你希望所有的工作都能为你完成?谢谢。这很有效。现在我必须找到一种方法来移除这些。或者你可以先自己尝试一下(比如学习一些SQL,或者用另一种语言编写一个简单的程序),为什么你希望所有的工作都能为你完成呢?