2014-10-20 2 views
0

을 사용하면 Sybase ASE에서 dense_rank 기능을 재구 축할 수 있습니까?sybase의 dense_rank 대신 ASE

그래서 모든 튜플 (foo, bar)에 대해 고유 번호가 필요합니다.

테이블 :

+-----+-----+ 
| foo | bar | 
+-----+-----+ 
| a | a | 
| a | b | 
| a | c | 
| a | c | 
| b | a | 
| b | a | 
+-----+-----+ 

결과 :

+-----+-----+------+ 
| foo | bar | rank | 
+-----+-----+------+ 
| a | a | 1 | 
| a | b | 2 | 
| a | c | 3 | 
| a | c | 3 | 
| b | a | 4 | 
| b | a | 4 | 
+-----+-----+------+ 

어떻게이 dense_rank 기능이없는이 작업을 수행 할 수 있습니까?

대단히 감사합니다.

답변

2

동일한 기능을 제공합니다 다음 하위 쿼리 :

select t.*, 
     (select 1 + count(distinct foo + ':' + bar) 
     from table t2 
     where t2.foo < t.foo or 
       t2.foo = t.foo and t2.bar < t.bar 
     ) as rank 
from table t; 
+0

정말 감사합니다! 그러나'1 +'은 어떻게 달라질 수 있습니까? 그것도 없이는 잘 작동하는 것 같아 –

+0

@ 윌리 피셔. . . 'dense_rank()'는 0이 아닌 1에서 계산되기 시작합니다. –

+0

다시 한번 감사합니다 :) –