查询返回每个副本的1行

时间:2012-09-04 13:34:13

标签: sql

我正在使用MS SQL 2008R2。我正在使用部分数据集(即并非所有colunms)并且无法排除重复的行。例如,以下是声明的行:

Claim       Line Doctor Received    Paid
02195111345 1    22924  1995-11-13  2001-10-02  
02195111345 1    22924  1995-11-13  2001-10-02  
02195111345 2    22924  1995-11-13  2001-10-02  
02195111345 2    22924  1995-11-13  2001-10-02  
02195111345 3    22924  1995-11-13  2001-10-02  
02195111345 3    22924  1995-11-13  2001-10-02  
02195111345 4    22924  1995-11-13  2001-10-02  
02195111345 4    22924  1995-11-13  2001-10-02  
02195111345 5    22924  1995-11-13  2001-10-02  
02195111345 5    22924  1995-11-13  2001-10-02  

我想为每个Claim + Line只选择一行。还有其他列,但它们包含Claim + Line的每个组合的相同信息。

我可以使用查询轻松识别带有重复项的行,例如:

SELECT [ClaimNum],[ClaimNum_Line]
FROM [dbo].[DamagedClaims]
GROUP BY [ClaimNum],[ClaimNum_Line]
HAVING COUNT(*) > 1 

通常,我会使用此查询创建派生表并将其连接回表 - 使用其他库存(例如MAX(版本)等),但是没有用于区分重复项的列。

我考虑过了

SELECT ClaimNum], Line, MAX(DOCTOR), MAX([Date Received]), MAX([Date Paid])

但是大约有20列和7.5亿行,这似乎是很多开销(我非常同情我们的SQL Server!)。有更好的解决方案吗?

最佳, 斯科特

3 个答案:

答案 0 :(得分:2)

只需在DISTINCT

中添加SELECT即可
SELECT DISTINCT Claim, Line, Doctor, Received, Paid
FROM tableName

答案 1 :(得分:2)

我看到没有列可以作为最大行的基础,请尝试使用DISTINCT

SELECT DISTINCT *
FROM tableA

答案 2 :(得分:1)