1

我需要编写查询,以查找列 Description 中具有相同或相似重复项的所有项目。

我当前的查询将找到所有完全相同的值,但它必须包含相似的值;例如 SQL Sql 和 sql。

SELECT 
    Description, COUNT(*) AS Count_Of    
FROM
    Source 
GROUP BY
    [Description]  
HAVING 
    COUNT(*) > 1   

我知道如何使用 LIKE 在表格中搜索与我定义的内容相似的所有项目,我可以将它应用于这个问题吗?

非常感谢任何和所有的帮助,谢谢。

-- 2013 年 3 月 26 日编辑

当我说类似时,我的意思不仅仅是区分大小写。我正在使用公司名称,并且必须考虑使用不同名称的人,例如 Monsters Inc 和 Monsters Incorporated。

我还希望输出显示描述是什么,以便我知道哪些公司在数据库中有冗余。

从那以后,我一直注意区分大小写

SELECT
    LOWER (Description), COUNT(*)AS Count_Of

解决

我有一个查询来查找所有重复的确切内容,我还有一个查询可以找到我指定的项目的所有类似项目。

我解决它的方法是运行第一个查询并将所有重复的项目存储在一个表中,然后修改第二个查询,以便在运行时它会在我刚刚创建的表中的每个项目的位置找到所有相似的项目。

非常感谢所有帮助过的人

4

3 回答 3

1

您可以使用Group By + CASE WHEN对相似的值进行分组,但需要做一些繁琐的工作,例如:


 SELECT 
    CASE WHEN DESCRIPTION LIKE '%ONE%' THEN 'LIKEONE'
         WHEN DESCRIPTION LIKE '%TWO%' THEN 'LIKETWO'
         ELSE 'LIKEOTHER'END , COUNT(*) AS Count_Of    
FROM
    Source 
GROUP BY
    CASE WHEN DESCRIPTION LIKE '%ONE%' THEN 'LIKEONE'
         WHEN DESCRIPTION LIKE '%TWO%' THEN 'LIKETWO'
         ELSE 'LIKEOTHER'END 
HAVING 
    COUNT(*) > 1 
于 2013-03-25T23:29:20.787 回答
1

根据“相似”的含义,您会发现 SOUNDEX 很有用:

http://www.techonthenet.com/oracle/functions/soundex.php

如果不是,您所说的相似是什么意思?

于 2013-03-25T22:35:36.983 回答
1

如果您只想进行不区分大小写的比较,那么只需在GROUP BY子句中指定适当的不区分大小写的排序规则。

例如,您可以使用以下内容:

SELECT 
    Description COLLATE SQL_Latin1_General_CP1_CI_AS,
    COUNT(*) AS Count_Of    
FROM
    Source 
GROUP BY
    [Description] COLLATE SQL_Latin1_General_CP1_CI_AS
HAVING 
    COUNT(*) > 1 
于 2013-03-25T22:11:46.730 回答