2014-10-20 5 views
0

Есть ли способ перестроить функцию dense_rank в Sybase ASE?Альтернатива dense_rank в sybase 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

@WilliFischer. , , 'dense_rank()' начинает отсчет с 1, а не 0. –

+0

Я вижу, спасибо еще раз :) –

Смежные вопросы