通过多个条件在SQL Server中查找重复行

3

我的领域是

ID | Name | StartTime | EndTime | Date | Description

我希望能够选择所有除ID外所有字段都相同的行。

我对SQL并不是很熟悉,所以我尝试了这个方法,但只有一个相关的字段(不像我这种情况需要五个)。

我的第一个想法是尝试类似于:

SELECT *
FROM Table
order by Name, Date, StartTime, EndTime, Description

如果我浏览所有条目,至少可以找到重复项,但这绝不是解决问题的最佳方法。

4个回答

2
这应该可以满足您的需求:
select Name, Date, StartTime, EndTime, Description
from   table
group by Name, Date, StartTime, EndTime, Description
having count(*) > 1

1
这个查询语句应该适合你的需要:

SELECT ID, Name, StartTime, EndTime, Date, Description
FROM (
    SELECT 
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY ID, Name, Date, StartTime, EndTime, Description) AS 'IndexNr'
        , ID
        , Name
        , StartTime
        , EndTime
        , Date
        , Description
    FROM Table) AS ResultSet
WHERE ResultSet.IndexNr > 1

1
请尝试以下查询。
SELECT     Name, Date, StartTime, EndTime, Description
FROM    Table
GROUP BY Name, Date, StartTime, EndTime, Description
HAVING      (COUNT(*) > 1)

-1
你可以尝试这个:-
SELECT *
FROM TAB_NAME
HAVING COUNT(CONCAT(Name, StartTime, EndTime, Date, Description)) > 1

这将为您提供除ID之外的所有重复行。


你不能在没有使用"GROUP BY"的情况下使用"HAVING"。 - t-clausen.dk
@t-clausen.dk 我认为该查询是可执行的,你必须首先尝试一下。当我们必须在条件中放置聚合函数时,才会使用“Having”。它与“group by”子句无关。你必须参考一些文档来了解这个问题。 - Ankit Bajpai
1
好的,我现在正在参考一些文档。看看其他所有答案。而且如果你的语法能够工作,它会很慢。如果你有两行值为:null、null、null、'A'和'A'、null、null、null,它们在这个匹配中被认为是相同的。在使用group by时不能使用通配符。所以一切都是错误的。 - t-clausen.dk

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接