2015-05-24 4 views
4

Предположим, у меня есть таблица, содержащая имена & номеров.Ранжирование повторяющихся значений с другим номером

Если есть 2 строки с одинаковыми значениями, он будет иметь тот же ранг.

Как я могу дать им другое число, несмотря на то же значение?

Так, например, вместо того, чтобы иметь такие ранги - 1,2,3,3,4 (где предметы 3 & 4 имеют одинаковый ранг), я хочу, чтобы мой ранг выглядел так: 1,2,3 , 4,5

Редактировать -

Отображение номер строки не помогает мне, потому что, как я сказал, что хочу, чтобы ранжировать строки.

Пример -

Если я использовать обычный чин, это то, что я получу. Я хочу, чтобы для User1 со значением 80 он показывал ранг 2 и 3, а не 2 & 2. То же самое для User2. Используя номер строки, очевидно, не даст мне этот результат ....

╔═══════╦═══════╦══════╗ 
║ Name ║ Value ║ Rank ║ 
╠═══════╬═══════╬══════╣ 
║ User1 ║ 90 ║ 1 ║ 
║ User1 ║ 80 ║ 2 ║ 
║ User1 ║ 80 ║ 2 ║ 
║ User1 ║ 70 ║ 3 ║ 
║ User2 ║ 100 ║ 1 ║ 
║ User2 ║ 90 ║ 2 ║ 
║ User3 ║ 90 ║ 2 ║ 
║ User3 ║ 80 ║ 3 ║ 
╚═══════╩═══════╩══════╝ 

Надежда, что было достаточно ясно ... Спасибо!

+0

Какие СУБД вы используете? – BICube

+0

Не могли бы вы предоставить какой-то единственный код. Кроме того, какие rdms вы используете? –

+1

Если у вас есть две строки с одинаковыми значениями _, то дублирующиеся строки могут быть удалены и итоговая таблица будет действительна по определению. Однако, если они «упорядочены», тогда «строки» не являются такими же, как «позиция (индекс)» является частью «значений строк». поэтому они могут быть ранжированы. –

ответ

2

Почему вы говорите ROW_NUMBER() не поможет вам здесь.

DECLARE @tbl TABLE(Name VARCHAR(10), Value INT) 

INSERT @tbl 
    SELECT 'User1' , 90 UNION ALL 
    SELECT 'User1' , 80 UNION ALL 
    SELECT 'User1' , 80 UNION ALL 
    SELECT 'User1' , 70 UNION ALL 
    SELECT 'User2' , 100 UNION ALL 
    SELECT 'User2' , 90 UNION ALL 
    SELECT 'User3' , 90 UNION ALL 
    SELECT 'User3' , 80 

SELECT Name, Value 
     ,ROW_NUMBER() OVER(PARTITION BY Name ORDER BY Name, Value) AS Rn 
FROM @tbl 

Name Value Rn 
User1 70  1 
User1 80  2 
User1 80  3 
User1 90  4 
User2 90  1 
User2 100  2 
User3 80  1 
User3 90  2 
+0

Пожалуйста, ознакомьтесь с результатами и желаемыми результатами, опубликованными в моем OP. В вашем примере user2 начинает свой рейтинг с 5, я хочу, чтобы он начинался с 1 – thomas

1

Это зависит от ваших RMDBS:

  1. SQL сервер: ROW_NUMBER(). Это стандарт ANSI.
  2. ROWNUM.
  3. Эта функция не существует: http://blog.sqlauthority.com/2014/03/08/mysql-generating-row-number-for-each-row-using-variable/

запрос будет выглядеть следующим образом:

SELECT FIELD_1, FIELD_2, ROW_NUMBER() FROM TABLE_A 

Надежда, что помогает

+2

'ROW_NUMBER()' является стандартом ANSI и поддерживается всеми реальными базами данных. –

+0

Пожалуйста, см. Мое редактирование, номер строки здесь не помогает. – thomas

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