SQL - 根据具有不同数据类型的3列查找重复项

时间:2015-01-16 01:48:03

标签: sql sql-server

SQL noob,请告诉我,如果我没有正确的措辞。我正在尝试查找3列中存在多个相同数据实例的所有条目。以下是3列中的一些示例数据。

formatid    type_from            call_desc_code
20          002694W0:USAGE       V9
20          013030W0:USAGE       OM
20          013030W0:USAGE       NULL

根据我的理解,校验和可用于此,但以下查询的输出似乎不正确。我在#temp表中放入的查询的第一部分有29824个结果,它告诉我3列中应该只有29824个唯一组合,但是当我运行完整查询时,尝试在Excel中删除重复项只有那3列才能完整性检查结果我有更多的东西,然后剩下29824个条目。

formatid是一种smallint数据类型,因此当我尝试使用+连接单元格时,它会返回转换失败错误。我正在运行SQL Server 2012,但我不认为数据库是相同的,因为它无法识别concat函数。

select checksum(formatid,type_from,call_desc_code) & checksum(reverse(formatid),reverse(type_from),reverse(call_desc_code)) as [checksum], count(*) as [Blah]
into #temp
from Table
group by checksum(formatid,type_from,call_desc_code) & checksum(reverse(formatid),reverse(type_from),reverse(call_desc_code))
having count(*) > 1

select * from
Table
where checksum(formatid,type_from,call_desc_code) & checksum(reverse(formatid),reverse(type_from),reverse(call_desc_code)) in (select [checksum] from #temp)
drop table #temp

1 个答案:

答案 0 :(得分:1)

这将从源表中获取具有重复项的所有内容

select *
from table t
inner join 
        (select formatid,type_from,call_desc_code
        from Table
        group by formatid,type_from,call_desc_code
        having count(*) > 1) dup
    on dup.formatid = t.formatid
    and dup.type_from = t.type_from
    and dup.call_desc_code = t.call_desc_code