我有以下查询:
SELECT Distinct Contract, Description
FROM Statement
通常每个合同都有一个描述,反之亦然。 然而,合同可能会有拼写错误。这导致两行应该是同一对实例。
这有问题,我正在寻找一种解决方法。 如果不匹配,我希望比较每种描述的可能合同的频率,并只选择最常见的频率。
例如:
Contract Description
X XX
X XX
Y YY
A XX
查询将返回三对:
X : XX
Y : YY
A : XX
我希望修复它,以便它只返回以下对:
X : XX
Y : YY
欢迎提出任何建议 我正在使用SQL Server。
答案 0 :(得分:4)
使用row_number()
:
select description, contract
from (select description, contract, count(*) as cnt,
row_number() over (partition by description order by count(*) desc) as seqnum
from t
group by description, contract
) t
where seqnum = 1;
您要查找的内容在统计信息中有一个名称。它被称为mode
。这是一组数据(或特定组)中最常见的值。
注意:以上内容将为每个description
返回一个唯一模式。可以有联系。如果您需要所有值,请使用rank()
或dense_rank()
代替row_number()
。
在rextester上进行测试:http://rextester.com/MODKIE76399