2010-06-01 15 views
2

这些是输入表和所需的输出表。如何区分使用sql的第一个和其余重复记录?

 

           Input table 

ID Name 
------------- 
1 aaa 
1 ababaa 
2 bbbbbb 
2 bcbcbccbc 
2 bcdbcdbbbbb 
3 ccccc 

 
           Output table 

ID Name  Ord 
----------------------------- 
1 aaa   first 
1 ababaa  rest  
2 bbbbbb  first 
2 bcbcbccbc rest  
2 bcdbcdbbbbb rest 
3 ccccc  first 

第一和其余的是基于ID字段的发生。

有没有办法编写一个SQL查询来实现这一点?

P.S. - 这question有点类似于我在找的东西。

回答

1

你也可以试试这个

SELECT id, name, 
Decode(ROW_NUMBER() OVER (partition by id order by id,name),1,'First','Rest') Ord 
FROM Input_table; 

,因为这是非常简单的,并产生良好的性能

+0

为什么您的查询的性能会比msi77的更好您可以使用此查询? – Biswanath 2010-06-01 17:19:02

+0

由于此查询使用了row_number函数,并且没有内联视图 – Bharat 2010-06-03 15:09:03

2
select id, name, case rnk when 1 then 'first' else 'rest' end ord 
from(
select *, RANK() over(partition by id order by id,name) rnk 
from input 
) X 
相关问题