Как сделать счетчик в sql
Как добавить счетчик (автоинкремент) в запрос
8 ответов
Ох. Уважаемый, сколько же писать о том что нужно дать более полную информацию.
Какую БД Вы используете.
в запрос типа select никак
Вот здесь по transact-SQL
В MySQL есть параметр AUTO_INCREMENT.
если конкретнее то вот
Извините, забыл. FireBird 2.0.
Где-то на этом форуме видел, вроде Охотник333 приводил пример, но найти, к сожалению, не могу =(
Вот два примера. Но прикрутить к себе пока не хватает мозгов.
1) через подзапрос во фразе SELECT:
select (
select count(1)
from t t2
where t1.name >= t2.name
) as rn,
name,
age
from t t1
2) через селф-джойн и группировку:
select count(1) as rn,
t1.name,
t1.age
from t t1
join t t2
on t1.name >= t2.name
group by t1.name, t1.age
если у вас не существует счётчика, то запросом типа select вы его не создадите.
Для этих целей существует запрос ALTER TABLE (о конструкции написано выше)
Функция count() Calculates the number of rows that satisfy a query’s search condition. Available in SQL,DSQL, and isql. Это немного не то что Вы хотите.
Это ссылка на документацию
Это ссылка на FAQ с ответом на ваш вопрос, хотя на мой взгляд как то коряво. Использование тригера для автовычисляемых полей это не выход
Мне кажется здесь возникло непонимание нужд автора. Насколько я понял речь не идет об автоинкрементном поле в таблице, а идет о нумерации строк в выборке. Т.е. генераторы тут не при чем.
Вариантов вижу несколько:
1. Использовать хранимую процедуру, и делать выборку из нее.
2. Исользовать запросы, которые вы привели, если их можно модифицировать под ваши нужды. Но ИМХО, самообъединение таблиц для получения номера строки не самый быстродейственный вариант.
3. Нумеровать строки непосредственно в клиентском приложении.
P.S. Не в курсе последних версии FireBird, может там наконец появилась конструкция по аналогии с rownum в Оракле.
mysql> set @var:=0;
Query OK, 0 rows affected (0.00 sec)
BestProg
Данная тема базируется на предыдущих темах:
Поиск на других ресурсах:
Содержание
Условие задачи
В задаче нужно сделать поле ID_Source уникальным счетчиком. При добавлении новой записи в таблицу, значение поля должно увеличиваться на 1 (автоинкрементное поле), то есть быть уникальным.
Выполнение
После подключения базы данных в окне Server Explorer будет отображена база данных «MyDataBase.mdf» (рисунок 1).
База данных содержит одну таблицу Source (рисунок 2), которая содержит поля в соответствии с условием задачи.
Рис. 1. База данных MyDataBase.mdf в окне Server Explorer
Рис. 2. Таблица Source
2. Настройка поля ID_Source как счетчика. Свойство «Identity Column»
В соответствии с условием задачи поле ID_Source может быть уникальным. Современные базы данных поддерживают уникальность полей. Это означает, что при добавлении новой записи в базу данных автоматически формируется новое уникальное значение. Как правило, при добавлении новой записи для целого типа новое уникальное значение увеличивается на 1 относительно предшествующего уникального значения (необязательно). Невозможно изменить вручную или программно значение записей поля, которое есть счетчиком (уникальным значением). Всю эту работу берет на себя система управления базами данных.
Чтобы установить поле ID_Source уникальным, нужно выполнить следующие действия:
Рис. 3. Команда «Open Table Definition»
Рис. 4. Установление свойства Identity Column в значение ID_Source
После выполненных действий поле ID_Source будет автоматически генерировать уникальное целочисленное значение.
Теперь эту таблицу можно использовать в своих проектах.
3. Заполнение таблицы данными
После установлки в таблице поля ID_Source как уникального счетчика можно программно или вручную заполнять таблицу данными (записями).
Чтобы заполнить таблицу данными (записями) нужно выполнить следующие действия:
Рис. 5. Команда «Show Table Data»
Рис. 6. Ввод данных в таблицу Source
Функция COUNT (Transact-SQL)
Эта функция возвращает количество элементов, найденных в группе. Функция COUNT работает подобно функции COUNT_BIG. Эти функции различаются только типами данных в возвращаемых значениях. Функция COUNT всегда возвращает значение типа данных int. Функция COUNT_BIG всегда возвращает значение типа данных bigint.
Синтаксические обозначения в Transact-SQL
Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
ALL
Применяет агрегатную функцию ко всем значениям. Аргумент ALL используется по умолчанию.
DISTINCT
Указывает, что функция COUNT возвращает количество уникальных значений, не равных NULL.
expression
Выражение любого типа, кроме image, ntext и text. Обратите внимание, что функция COUNT не поддерживает агрегатные функции и вложенные запросы в выражении.
*
Указывает, что функция COUNT должна учитывать все строки, чтобы определить общее количество строк таблицы для возврата. Функция COUNT(*) не принимает параметры и не поддерживает использование аргумента DISTINCT. Для функции COUNT(*) не требуется параметр expression, так как по определению она не использует сведения о конкретном столбце. Функция COUNT(*) возвращает количество строк в указанной таблице с учетом повторяющихся строк. Она подсчитывает каждую строку отдельно. При этом учитываются и строки, содержащие значения NULL.
Типы возвращаемых данных
Remarks
Функция COUNT(*) возвращает количество элементов в группе. Сюда входят значения NULL и повторяющиеся значения.
Функция COUNT(ALL expression) вычисляет expression для каждой строки в группе и возвращает количество значений, не равных NULL.
Функция COUNT(DISTINCT expression) вычисляет expression для каждой строки в группе и возвращает количество уникальных значений, не равных NULL.
COUNT — это детерминированная функция, если она используется без _ предложений OVER и ORDER BY. Она не детерминирована при использовании _ с предложениями OVER и ORDER BY. Дополнительные сведения см. в статье Детерминированные и недетерминированные функции.
Примеры
A. Использование функции COUNT и параметра DISTINCT
В этом примере функция возвращает количество различных должностей, которые может иметь сотрудник Компания Adventure Works Cycles.
Б. Использование функции COUNT(*)
В этом примере функция возвращает общее количество сотрудников Компания Adventure Works Cycles.
В. Использование функции COUNT(*) совместно с другими статистическими функциями
Г. Использование предложения OVER
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
Д. Использование функции COUNT и параметра DISTINCT
В этом примере функция возвращает количество различных должностей, которые может иметь конкретный сотрудник компании.
Е. Использование функции COUNT(*)
Ж. Использование функции COUNT(*) совместно с другими статистическими функциями
З. Использование функции COUNT с предложением HAVING
И. Использование функции COUNT с предложением OVER
Работа с MS SQL в Delphi. Создаем поле-счетчик в таблицах MS SQL Server
Доброго времени суток дорогие друзья. Давненько я ничего не писал. Решил написать статью про Microsoft SQL Server, так как много вопросов было по этому поводу, а если быть точным, то о том, как можно создать поле Счетчик в MS SQL Server.
Все знают замечательный тип данных в MS Access – Счетчик, который сам увеличивает значение при добавлении новой строке данных в таблицу. Многие бы хотели сделать тоже самое и в Microsoft SQL Server. Это возможно и очень просто, поэтому в данной статье мы рассмотрим эту возможность. Кроме этого, я расскажу: как я создаю БД, к ним таблицы и другие данные. Ну и напоследок, мы рассмотрим, как можно подключиться к SQL Server через ADO в Delphi.
Ничего сложного нет и для начала нам необходим MS SQL Server, который можно взять с официального сайта Microsoft (я установил 2005 версию). Поэтому скачиваете, если у Вас нет его еще, устанавливаете и запускаете. Для создания баз данных, их редактирования, присоединения к серверу, я использую среду Microsoft SQL Server Management Server Studio Express. Если честно, то довольно мощное средство. Поэтому, для нашей статьи, данное программное обеспечением нам также понадобится. Его Вы также можете скачать с официального сайта Microsoft, делаем это и устанавливаем.
После того как у нас установлен MS SQL Server и приложение для доступа к нашему серверу, нам необходимо подключиться к нему. Поэтому, запускаем SQL Server Management Server Studio Express и подключаемся к нашему серверу (из списка выбрать нужный сервер, если у Вас их несколько):
В данном окне выбрали нужное имя сервера и нажали на кнопку Соединить. После этого, в обозревателе объектов, мы можем наблюдать список всех объектов, которые мы можем создавать, изменять, удалять на сервере. Начать необходимо с создания базы данных, поэтому, нажимаем правой кнопкой мыши по объекту Базы данных и из контекстного меню выбираем пункт Создать базу данных…
В появившемся окне нам необходимо ввести имя базы данных и сделать соответствующие настройки. Я все оставил стандартно, если Вам необходимо иметь какие-то определенные настройки, то сделайте это. Затем нажмите на кнопку ОК. После этого, в обозревателе объектов у Вас должна появиться Ваша база данных, для которой мы можем создавать другие объекты: таблицы, индекса и так далее.
Мы раскрываем в обозревателе объектов пункт Базы данных и находим в списке нашу созданную БД, которую также раскрываем. В данном списке находим объект Таблицы и по нему нажимаем правой кнопкой мыши, после чего, в контекстном меню выбираем пункт Создать таблицу…
В следующем окне нам необходимо создать таблицу: задать список полей, задать имя таблицы и внимание. Задать типы данных полей, в том числе и для нашего поля-счетчика. Если Вы определились со списком полей, с именем таблицы и с типами, то давайте зададим тип счетчик для нашего поля. Оно у меня называется id и тип я ему задал int:
Для того чтобы в нем увеличивалось значение на единицу автоматически, Вам необходимо перейти в окно Свойства столбцов, которое находится ниже. То есть, Вы выделяете наш столбец (id) и переходим в его свойства, где находим свойство – Спецификация идентифицирующего столбца. Раскрываем данное свойство и в поле (Является идентифицирующим столбцом) устанавливаем значение Да.
Дальше у Вас станут доступны следующие свойства: Начальное значение и Приращение. Вы можете при помощи них задать значение, с которого у Вас будет начинаться счетчик, а также значение – на которое у Вас будет увеличиваться счетчик. Все, сохраняете таблицу, затем открываете ее в среде и пробуйте ввести какие-то значение, поле id у Вас будет не доступно для ввода, так как его значение будет формироваться автоматически:
Вот так вот, теперь Вы знаете, как можно создать поле Счетчик в таблицах базы данных MS SQL Server. Ничего в этом сложного нет. Нам теперь остается лишь рассмотреть возможность подключение к базе данных SQL Server в Delphi, при помощи компонентов ADO. Ну что, давайте приступим к рассмотрению нашей последней части статьи.
Устанавливаем на форму компонент TADOConnection и TADOQuery, связываем их. В свойстве Connection компонента TADOQuery указываем имя компонента TADOConnection. Затем выделяем компонент TADOConnection и следующие его свойства устанавливаем в значения:
Открываем свойства ConnectionString и настраиваем строку подключения к нашему серверу и соответственно базе данных. В первой вкладке, выбираем поставщика данных – Microsoft OLE DB Provider for SQL Server, затем нажимаем кнопку Далее>>, где указываем имя сервера, а затем и имя нашей базы данных.
Все, затем нажимаем на кнопку Проверить подключение, если оно прошло успешно, то нажимаем на кнопку ОК и устанавливаем свойство Connected компонента TADOConnection в True.
Вот примерно и все. Далее Вы можете делать запросы, либо работать с данными SQL Server как и в работа с ADO в Delphi.
Кстати, Вы можете присоединить свою базу данных к серверу при помощи среды Microsoft SQL Server Manegement Studio Express, либо же при помощи Delphi (когда делаете подключение). В итоге, в данной статье мы рассмотрели ответы на следующие вопросы (которые задавали Вы):
Ну что, теперь я буду с Вами прощаться, задавайте еще вопросы и до новых встреч дорогие друзья, всего Вам самого наилучшего. Не забудьте прочитать статью о том, как можно подключиться к БД MySQL при помощи ADO.
Типы данных SQL Server
Было бы чудесно, если бы программы SQL Server и Access применяли один и тот же набор типов данных. Но у этих приложений разное происхождение и порой их отличия заметны.
К счастью, между большинством типов данных программ есть близкое соответствие. Это означает, что у большей части типов данных Access есть соответствующий тип данных SQL Server, очень близкий к типу Access. (Когда БД преобразуется, программа Access, как пра- вило, способна подобрать хорошее соответствие.) В табл. 20.1 приведены типы данных про- граммы SQL Server, которые вы получаете для разных типов данных Access.
У программы SQL Server есть еще много типов данных, не приведенных в этой таблице и не имеющих близких аналогов в программе Access. Но типы данных, которые включены в таблицу, — несомненно, самые распространенные.
Таблица 20.1. Сравнение типов данных SQL Server и Access
Эквивалент SQL Server
nvarchar (способен хранить до 4000 символов, в отличие от Текстового типа данных Access, у которого верхний предел составляет 255 символов)
Эквивалент SQL Server
Числовой (Number) (со значением в свойстве Размер поля (Field Size) — Целое (Integer))
Числовой (Number) (со значением в свойстве Размер поля (Field Size) — Длинное целое (Long Integer))
Числовой (Number) (со значением в свойстве Размер поля (Field Size) — Одинарное с плавающей точкой (Single))
Числовой (Number) (со значением в свойстве Размер поля (Field Size) —Двойное с плавающей точкой (Double))
Числовой (Number) (со значением в свойстве Размер поля (Field Size) —Действительное (Decimal))
Числовой (Number) (со значением в свойстве Размер поля (Field Size) — Байт (Byte))
Числовой (Number) (со значением в свойстве Размер поля (Field Size) — Код репликации (ReplicationID))
int (с параметром Identity равным Yes (Да))
nvarchar (сохраняется только имя файла)
Таблица 20.1 (окончание)
Возможно, вы заметили, что у программы SQL Server нет типа данных Счетчик. Но не дайте себя одурачить, решив, что нет способа получить это невероятно полезное средство в программе SQL Server. Просто задавать его придется немного иначе.
1. Когда создаете поле ID (Код), задайте для него тип данных int.
2. На вкладке Columns (Столбцы), расположенной под списком полей, задайте свойство Identity равным Yes (Да).
Значение параметра Identity — это имя поля типа Счетчик в программе SQL Server. Это имя программа присваивает автоматически и гарантирует его уникальность.
3. Вы также можете задать свойства Identity Seed (Начальное значение IDENTITY) и Identity Increment (Приращение IDENTITY).
? Значение Identity Seed (Начальное значение IDENTITY) — начальное значение. Это свойство — досадное упущение программы Access, которая всегда начинает считать с 1.
o Значение Identity Increment (Приращение IDENTITY) — величина, на которую программа SQL Server увеличивает очередное значение. Например, если Identity Increment — 5, вы увидите числа 1, 6, 11, 16 и т. д. Конечно, программа SQL Server может по разным причинам, как и программа Access, пропустить очередное значение.
Конструктор SQL Server лишен удобного мастера подстановки, который применяет программа Access. Вместо него вы должны выбрать поле, куда хотите поместить подстановку, щелкнуть кнопкой мыши вкладку Lookup (Подстановка) в нижней части окна конструктора (рис. 20.11) и затем заполнить все данные подстановки. Далее приведены ключевые параметры, необходимые для создания подстановки.
¦ В поле параметра Display Control (Тип элемента управления) следует задать Combo Box (Поле со списком), раскрывающийся список, позволяющий выбрать нужное значение.
¦ В поле параметра Row Source Type (Тип источника строк) нужно задать Tables/Views/Functions (Таблицы/представления/функции), если хотите создать подстановку, применяющую данные из связанной таблицы. (Если хотите предоставить просто список значений, можно использовать значение Value List (Список значений).)
Рис. 20.11. Подготовленная полностью подстановка для поля CreditCardID в таблице Orders
¦ В поле параметра Row Source (Источник строк) указываются данные для подстановки. Если данные извлекаются из другой таблицы, применяется SQL-команда SELECT, которая извлекает два поля — поле с описательной информацией и поле со значением ID (Код). Например, можно использовать команду SELECT ID, ProductName FROM Products ORDER BY ProductName для создания отсортированного по названию товара списка подстановки, который получает ID и название каждого товара из таблицы Products.
Если вы не хотите писать оператор SELECT самостоятельно, щелкните кнопкой мыши в этом поле и затем щелкните мышью кнопку с многоточием, открывающую окно запроса, в котором можно выбрать таблицу и поля. Это окно запроса немного отличается от Конструктора запросов программы Access, который вы использовали до этого.
¦ Параметр Bound Column (Связанный столбец) обозначает, какой столбец (из параметра Row Source (Источник строк)) должен быть добавлен в поле, когда выбрано значение из списка значений подстановки. Например, если первое поле в вашей команде SELECT — ID (как в предыдущем примере), нужно задать значение 1.
¦ В параметре Column Count (Число столбцов) задается количество столбцов, отображаемых в списке подстановки. Обычно задается значение 2 (для отображения обоих столбцов), но ширина первого столбца с номером ID задается бесконечно малой, поэтому вы его практически не видите.
¦ Параметр Column Heads (Заголовки столбцов) определяет, выводить ли заголовки в первой строке столбцов в списке подстановки. Обычно задается значение No (Нет). Однако если создается подстановка, отображающая несколько порций связанной информации, можно применить заголовки столбцов для того, чтобы легче было понять, что есть что, при просмотре списка подстановки.
¦ Параметр Column Width (Ширина столбцов) задает ширину каждого столбца в списке подстановки. Каждое значение в дюймах отделяется точкой с запятой. Например, значение 0 «;1» скрывает из вида первый столбец и делает второй столбец шириной 1 дюйм.
К сожалению, создание подстановки не формирует связь между двумя таблицами. Если вы хотите создать отношение, необходимо сделать это самостоятельно, как описано в следующем разделе.
Когда БД преобразуется, программе Access хватает изобретательности, чтобы сохранить все ваши подстановки.
Как вы узнали в главе 5, у каждой заслуживающей уважения БД есть множество отношений, В программе Access существуют два способа быстрого построения отношения: с помощью схемы данных и созданием подстановки в поле. Но в проекте Access ни одно из этих средств не доступно. Вместо этого вам придется определять отношения вручную в окне Конструктора для вашей таблицы.
Вот как это делается.
1. Откройте подчиненную или дочернюю таблицу в Конструкторе.
У этой таблицы есть поле, связанное с родительской таблицей. (Например, Products — дочерняя таблица для ProductCategories. Поле ProductCategorylD — связующее звено, которое присутствует в таблице Products.)
2. Выберите на ленте Table Tools | Design > Show/Hide > Property Sheet (Работа с таблицами | Конструктор > Показать или скрыть > Страница свойств).
Это действие выводит на экран диалоговое окно Properties (Свойства) (рис. 20.12), которое выглядит совсем не так, как Property Sheet (Окно свойств), которое вы применяли раньше в БД Access.
Рис. 20.12. Показано установленное отношение, связывающее таблицу OrderDetails (как дочернюю) с таблицей Products (как родительской). В каждой записи таблицы OrderDetails поле ProductID указывает на заказанный товар
3. Щелкните кнопкой мыши вкладку Relationships (Схема данных).
4. Щелкните кнопкой мыши кнопку New (Создать) для определения нового отношения.
5. В списке, расположенном под заголовком Primary key table (Таблица первичного ключа), выберите родительскую таблицу.
6. В первой строке, расположенной под именем таблицы, выберите однозначно определенное поле в родительской таблице.
(В этой области вкладки есть несколько строк, поскольку можно создавать отношения, основанные на нескольких полях, хотя это делается редко.)
7. В списке, находящемся под заголовком Foreign key table (Таблица внешнего ключа), выберите дочернюю таблицу.
В первой строке, расположенной ниже, выберите поле в дочерней таблице, которое указывает на связанную родительскую запись.
8. Если хотите убедиться в том, что существующие данные удовлетворяют данному отношению, установите флажок Check existing data on creation (Проверять существующие данные при создании).
Если не хотите проверять имеющиеся записи на соответствие правилам данного отношения, не устанавливайте этот флажок. Если в вашей таблице еще нет данных, ваш выбор не играет роли.
9. Установите флажок Enforce relationships for INSERTS and UPDATES (Обеспечить отношение для INSERT и UPDATE), если хотите обеспечить ссылочную целостность при добавлении и изменении записей.
Это действие не позволит нарушать правила отношения при добавлении и редактировании записей. Например, будет запрещена вставка дочерней записи, указывающей на несуществующую родительскую запись. Если вы решите не применять ссылочную целостность, можно использовать один из вариантов, расположенных ниже, для переключения на каскадные обновления или удаления.
10. Когда закончите, закройте окно.
Таблицы данных — не единственные объекты БД, хранящиеся в БД SQL Server. Ваша БД SQL Server может также содержать запросы, бесконечно полезные процедуры для поиска (или изменения) нужных записей.
У объектов, которые приверженцы программы Access называют запросами, совсем иное существование в SQL Server. Там, где вы видите запросы, программа SQL Server видит три объекта разных типов.
¦ View (Представление). Представление — приблизительный аналог запроса на выборку (select query) — он выбирает записи (возможно, из связанных таблиц) и отображает их на листе данных.
¦ User-defined function (Пользовательская функция). Пользовательская функция аналогична запросу на выборку с параметрами. (Как вы уже знаете, параметры позволяют запрашивать порцию информации сразу перед выполнением запроса. Эту информацию затем можно применить для отбора записей и выполнения вычисления.)
¦ Stored procedure (Хранимая процедура). Хранимая процедура — тяжеловес среди объектов БД SQL Server. Она может выполнять целый ряд задач, таких как выбор записей, фиксация изменений, выполнение транзакций. Вы не будете использовать большую часть этих возможностей, когда создадите хранимую процедуру в программе Access. Вместо этого вы будете применять хранимые процедуры для создания аналога запроса на изменение в SQL Server, который фиксирует в БД одиночную операцию обновления, добавления или удаления.
В следующем разделе вы попытаетесь приложить руки к созданию базового представления.