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 来自给定重复组的同一行。
我有一个有趣的问题。
我继承了一个草率的数据库,其中 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 来自给定重复组的同一行。