Упорядочивание SQL по номеру позиции в каждой строке и вставка в нее

#sql #sql-server-2008

#sql #sql-server-2008

Вопрос:

Возможно ли выполнить запрос select с порядком по и в результате вставить новый столбец с позицией каждой строки?

например, у меня есть таблица:

 Name
-------
A
D
D
B
C
B
  

и в результате я хотел бы иметь таблицу:

 Name Position
-------------
A 1
D 4
D 4
B 2
B 2
C 3
  

спасибо за любую помощь

Комментарии:

1. какова связь между ‘A’ и ‘1’ — и ‘B’ и ‘2’ — я предполагаю, что вы будете упорядочивать по имени?

2. Вы отредактировали две минуты назад, указав, что если дважды встречается ‘B’, то им следует присвоить одинаковое значение позиции?

3. Вы говорите о добавлении столбца в саму таблицу или в ваш select запрос?

Ответ №1:

Используйте DENSE_RANK

 SELECT Name ,
    DENSE_RANK() OVER (ORDER BY Name) AS 'Position'
    FROM Table
  

Это приведет к

 Name Position
-------------
A   1
B   2
B   2
C   3
D   4
D   4
  

поэтому может быть сложно сохранить первоначальный порядок

Комментарии:

1. Похоже, вам нужно dense_rank

Ответ №2:

используйте row_number

 SELECT name,ROW_NUMBER() OVER(ORDER BY name) as Position
 FROM YourTable
  

Ответ №3:

 SELECT 
    Name, 
    ROW_NUMBER() OVER(ORDER BY Name) AS POSITION 
FROM Table_1
  

Ответ №4:

 SELECT Name, DENSE_RANK() OVER (ORDER BY Name) AS 'Position' 
FROM Table