Автоматически генерировать числовое поле на основе другого поля

#sql #sql-server #string #sql-order-by #sql-view

#sql #sql-сервер #строка #sql-order-by #sql-просмотр

Вопрос:

У меня есть таблица в SQL server с двумя столбцами: Name и Order. Name — это varchar столбец, содержащий имена учащихся, Order — это int столбец, содержащий число в порядке возрастания, соответствующее столбцу Name в алфавитном порядке.

Например, ожидаемый результат должен быть таким, как показано ниже

 Names - Order

ABC - 2
AAA - 1
CCC - 3
XZZ - 5
XYZ - 4
  

Есть ли какая-либо возможность автоматически генерировать столбец order всякий раз, когда в таблицу вставляется новое имя?

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

1. В таблицах есть столбец , а не поля.

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

3. Также укажите ожидаемый результат.

4. Я использую SQL DB

5. Зачем вам нужен столбец order? SQL Server позволит вам упорядочивать в алфавитном порядке по имени столбца? И если вам нужен номер строки, используйте функцию row_number . Вам не нужно ничего хранить.

Ответ №1:

Order — это столбец int, который содержит число в порядке возрастания, соответствующее столбцу Name в алфавитном порядке.

Просто используйте row_number() . Вы не должны хранить эту производную информацию — вместо этого вы можете использовать представление:

 create view myview as
select t.*, row_number() over(order by name) as rn
from mytable t
  

Примечание: order является ключевым словом языка (как в order by ... ), следовательно, не является хорошим выбором для имени столбца; Я использовал rn вместо этого.