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