Return 除一列中具有重复 ID 的行之外的所有列

Return all columns excluding rows with a duplicateID in one column

我有一个有趣的问题。

我继承了一个草率的数据库,其中 table 有重复的行。但是,由于有一列(文本列),它们不是完全重复的。

这是一个例子:

TestID            TestDescription                                               Cost
115893hc127aaq    Etiology    • Understand the causes of acute pancreatitis     
115893hc127aaq    Etiology • Understand   the causes of acute pancreatitis      
115893hc127aaq    Etiology  • Understand the causes of acute   pancreatitis     

可以看到除了'TestDescription'之外的所有数据都是一样的

在 'TestDescription'

中有 1000 行这样的行,其中可能有 2 或 3 行具有较小的间距或拼写问题

因此,使用 DISTINCT 将不起作用。

我想 SELECT 所有行,但每个 TestID 只得到一行...假设是第一个,然后忽略其余的。

我试过 SELECT DISTINCT *

但我无法使用 DISTINCT 执行此操作,因为 TestDescription 包含行之间的微小差异。

SELECT DISTINCT TestID 有效,但只有 returns TestID,我需要查看所有列。

在 Sql Server 2012 中有没有办法做到这一点?

谢谢!

一种方法使用 row_number():

select *
from (
    select t.*, row_number() over(partition by testid order by (select null)) rn
    from mytable t
) t
where rn = 1

正如您的问题所暗示的那样,这假设您希望每个 testid 一行。

您没有说明要使用哪一栏来打破平局,我不确定是否真的有,所以我按 (select null) 进行了排序。这不是确定性的 order by 子句,因此查询的后续执行可能并不总是 select 来自给定重复组的同一行。