2011-08-02 44 views
3

我下表如何忽略某些类似行时选择

Id col1 col2 col3 
1 c 2  m 
2 c 3  6 
2 b d  u 
3 e 6  9 
4 1 v  8 
4 2 b  t 
4 4 5  g 

正如你所看到的,也有id列,2和4的重复值我只想选择具有价值的唯一ID行有并忽略具有重复的id值的以下行。我只是想保持第一行有重复值的

1 c 2  m 
2 c 3  6 
3 e 6  9 
4 1 v  8 

有FK约束,所以我不能有重复值的删除行。

我正在使用SQL SERVER 2008 R2

任何答复将不胜感激。

+1

你想如何确定你想在结果中重复哪行?是否有任何组合的字段保证是唯一的,例如'Id,Col1',以便它可以用作关键字? – Guffa

回答

7

您可以使用row_number来为每行编号使用相同的id。然后,你可以每id只选择第一行:因为SQL Server不允许row_number直接where子句中

select * 
from (
     select row_number() over (partition by id order by col1, col2, col3) rn 
     from YourTable 
     ) as SubQueryAlias 
where rn = 1 

子查询是必需的。