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

SQL - Finding duplicates based on 3 columns with different data types

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

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

据我所知,校验和可用于此目的,但以下查询的输出似乎不正确。我放入#temp table 的查询的第一部分有 29824 个结果,这告诉我应该只有 29824 个 3 列的唯一组合但是当我 运行 完整查询然后尝试仅根据这 3 列删除 Excel 中的重复项,以检查结果是否完整,我还剩下 29824 个条目。

formatid 是一个 smallint 数据类型,所以当我尝试用 + 它连接单元格时 returns 出现转换失败错误。我正在 运行ning 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

这将从您的来源 table 获得所有重复项

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