#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