在SQL表中查找所有类似的行

时间:2013-03-25 22:01:01

标签: sql sql-server sql-server-2008

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

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

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

我知道如何使用LIKE在表格中搜索与我定义的内容类似的所有项目,是否可以将其应用于此问题?

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

- 编辑3/26/13

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

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

我已经处理了

的区分大小写
SELECT
    LOWER (Description), COUNT(*)AS Count_Of

分辨

我有一个查询可以找到所有精确重复的查询,而且我还有一个查询可以查找我指定的项目的所有项目。

我要解决的问题是运行第一个查询并将所有重复的项目存储在一个表中,然后修改第二个查询,这样在运行时它会找到所有类似的项目,我刚刚创建的表中的每个项目

非常感谢所有帮助

的人

3 个答案:

答案 0 :(得分: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 

答案 1 :(得分:1)

根据“类似”的含义,您可以找到有用的SOUNDEX:

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

如果没有,你的意思是什么?

答案 2 :(得分:1)

您可以使用分组依据+ 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