Sql num rows: sql server — SQL count rows in a table

sql server — Как я могу присвоить номер каждой строке в таблице, представляющей номер записи?

Задавать вопрос

спросил

Изменено
5 лет, 3 месяца назад

Просмотрено
29 тысяч раз

Как показать количество строк в таблице таким образом, чтобы при добавлении новой записи число, представляющее строку, увеличивалось, а при удалении записи число обновлялось соответствующим образом?
Чтобы было понятнее, предположим, что у меня есть простая таблица:

ID int (первичный ключ) Имя varchar(5)

Идентификатор должен увеличиваться сам по себе (с использованием спецификации идентификатора), поэтому он не может представлять номер строки (записи), поскольку, если у меня есть, например, 3 записи как:

ID ИМЯ
1 Алекс
2 Скотт
3 Сара

и я удаляю Алекса и Скотта и добавляю новую запись это будет:

 3 Сара
4 Мина
 

Итак, в основном я ищу решение на стороне sql для этого, чтобы ничего не менять в исходном коде в нескольких местах.

Я пытался написать что-нибудь, чтобы выполнить работу, но это не удалось. Вот он:

 SELECT COUNT(*) AS [номер строки],Имя
ОТ dbo.Test
СГРУППИРОВАТЬ ПО ID, Имя
ИМЕЮЩИЙ (ID = ID)
 

Это отображается как:

 номер строки Имя
1 Алекс
1 Скотт
1 Сара
 

, в то время как я хочу, чтобы он отображался как:

 номер строки Имя
1 Алекс
2 Скотт
3 Сара
 
  • sql-server
  • дизайн базы данных
  • sql-server-express

5

Если вы просто хотите число против строк при выборе данных, а не в базе данных, вы можете использовать это

 выберите row_number() поверх (упорядочить по идентификатору) из dbo.Test
 

Это даст номер строки n для n-й строки.

1

Попробуйте

 ВЫБРАТЬ id, имя, ROW_NUMBER() НАД (ЗАКАЗАТЬ ПО id) AS RowNumber
ИЗ MyTable
 

То, что вы хотите, называется автоматическим приращением.

Для SQL-Server это достигается путем добавления атрибута IDENTITY(1,1) к определению таблицы.

Другие СУБД используют другой синтаксис. Firebird, например, имеет генераторы, которые делают подсчет. В триггере BEFORE-INSERT вы должны присвоить ID-полю текущее значение генератора (которое будет увеличено автоматически).

7

Недавно у меня была точно такая же проблема, но я использовал SQL Server 2000, поэтому, хотя row number() является лучшим решением, в SQL Server 2000 она недоступна. Обходной путь для этого — создать временную таблицу, вставить все значения с автоматическим увеличением и заменить текущую таблицу новой таблицей в T-SQL.

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя электронную почту и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

сервер sql — добавьте номер строки в набор результатов запроса SQL

У меня есть простой оператор выбора. Я хочу добавить временный столбец, который будет представлять количество строк в моем наборе результатов. Я пробовал это —

 объявлять @num int
установить @num = 0;
выберите tA, tB, tC, (@count + 1) в качестве числа
из таблицы Z как t
 

Присваивает 1 всем строкам. Я попробовал @count = @count + 1, и это не сработало.
Как мне сделать это простым способом?

спасибо.

  • sql
  • sql-сервер
  • sql-сервер-2005

4

 ВЫБОР
    т.А,
    т.Б,
    т.с,
    ROW_NUMBER() OVER (ORDER BY (SELECT 1)) КАК номер
ИЗ таблицы Z AS t
 

См. рабочий пример в SQLFiddle

Конечно, вы можете захотеть определить порядок нумерации строк — если это так, просто замените OVER (ORDER BY (SELECT 1)) , например, OVER (ORDER BY t.C) , как в обычном ORDER BY 9Пункт 0072.

2

Типичный шаблон выглядит следующим образом, но вам нужно определить, как должен применяться порядок (поскольку таблица по определению представляет собой неупорядоченный набор строк).