在SQL表中查找所有相似的行
我需要编写一个查询,从列描述中查找所有重复项相同或相似的项 我当前的查询将查找所有完全相同的值,但必须包含相似的值;例如SQL和SQL在SQL表中查找所有相似的行,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我需要编写一个查询,从列描述中查找所有重复项相同或相似的项 我当前的查询将查找所有完全相同的值,但必须包含相似的值;例如SQL和SQL SELECT Description, COUNT(*) AS Count_Of FROM Source GROUP BY [Description] HAVING COUNT(*) > 1 我知道如何使用LIKE在表中搜索与我定义的内容类似的所有项目,我可以将其应用于此问题吗 非常感谢您的帮助,谢
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
已解决
我有一个查询来查找所有重复的精确项,还有一个查询将查找我指定项的所有相似项
我解决这个问题的方法是运行第一个查询并将所有重复的项存储在一个表中,然后修改第二个查询,以便在运行时找到所有类似的项,而我刚刚创建的表中的每个项都在那里
非常感谢所有帮助如果您只是想进行不区分大小写的比较,那么只需在
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
根据“相似”的含义,您可以发现SOUNDEX非常有用:
如果不是,您所说的相似是什么意思?您可以在对相似值进行分组时使用按+大小写分组,但需要做一些立方体工作,例如:
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
这可能会有帮助:如果你定义“相似”的含义,这会有所帮助。您的示例(SQL、SQL、SQL)可以通过不区分大小写的搜索来解决,但这可能不是您真正的意思。虽然我这次没有用它,但将来我将不得不玩它。谢谢你告诉我这件事谢谢你让我知道这件事,我使用LOWER只会破坏这个案例,而你的方法会保留它