номер по порядку в запросе
Номер по порядку в запросе
Нумерация строк в запросе
В статье обсуждается добавление в результат запроса дополнительной колонки с порядковым номером строки, а также возможности, которые из этого появляются. | Автор статьи: zag2art | Редакторы: Immortal, Gimalaj Последняя редакция №23 от 15.08.19 | История URL: http://kb.mista.ru/article.php?id=703 |
Ключевые слова: нумерация строк запроса, ПЕРВЫЕ, нумерация строк в построителе, пронумеровать.
Иногда возникает необходимость добавить в запрос колонку с номером строки, например, когда нужно вывести номера строк в отчет, а используется построитель отчета. Также нумерация строк полезна, когда необходимо для определенных группировок вывести ограниченное количество строк, что-то типа «ПЕРВЫЕ 5 документов для каждого контрагента».
Данная статья навеяна обсуждением в теме v8: Раздумья над запросом
Итак, приступим. Есть запрос, выбирающий номенклатуру. Результат отсортирован по наименованию:
исходный запрос
Требуется добавить колонку с порядковым номером номенклатуры (в рамках данной сортировки):
запрос с номерами строк
В вышеуказанном запросе мы соединяем таблицу саму с собой довольно хитрым способом: по правой таблице подсчитываем количество номенклатуры с наименованием меньше текущего левого, используя группировку.
Аналогичную методику можно применить, если нужно задать нумерацию строк с учетом группировки по какому-либо полю:
запрос с номерами строк в рамках группировки
Пример реального использования:
Теперь немного о том, ради чего всё это делается. Какую пользу которую можно извлечь из нумерации строк запроса?
Например, перед нами стоит задача получить для каждого контрагента пять последних документов поступления товаров и услуг:
запрос с номерами строк при наличии дублей интересующего поля(того,относительно которого строится счетчик)
Нумерация строк в запросе
Помощь в написании контрольных, курсовых и дипломных работ здесь.
Вложения
Нумерация.rar (26.9 Кб, 590 просмотров) |
Нумерация строк в запросе
Добрый день, помогите запросом для нумерации строк в запросе, есть таблица с полем код все записи.
Нумерация строк в запросе
Подскажите, как в запросе указать создание в выходных данных нумерации строк, в таблице источнике.
Нумерация строк в запросе на объединение
Форумчане, помогите разобраться с запросом. Есть два списка-рейтинга, которые уже имеют свою.
Раз уж нельзя давать ссылки на другие форумы, то выкладываю фак c sql.ru (c) полностью:
Автор: Владимир Саныч, участники форума по Аксессу
Прислал: Владимир Саныч
Вопросы с ответами
Q1 : Как создать свой счетчик (чтобы поле было не типа счетчик)?
A: Надо написать функцию, к которой обращаться либо в DefaultValue контрола (к сожалению, DefaultValue поля в таблице допускает только ограниченный набор стандартных функций), либо в программе, которая добавляет запись через рекордсет, либо в запросе на добавление. Ниже приведено несколько вариантов такой функции. Особое внимание надо уделить обработчику ошибок.
Так можно нумеровать записи даже внутри группы, а не только насквозь через всю таблицу. Для этого надо правильно задать параметры DMax.
Правда, надо отдельно позаботиться о ситуации, когда два юзера обратятся к этому «генератору счетчиков» одновременно.
Подвариант: все-таки делать rsCounter.Update, тогда по виду этой таблицы будет сразу ясно, какое значение было выдано последним. Правда, в этом случае файл станет расти.
Еще подвариант: держать в этой таблице одну запись, в которой находится очередное значение счетчика, и вместо AddNew делать Edit и rsCounter!nCounter=rsCounter!nCounter+1, а потом соответственно Update.
Держим в отдельной таблице очередное значение счетчика и каждый раз увеличиваем его на 1. Таблица блокируется на момент чтения и увеличения счетчика, а все, кто в нее будут в это время стучаться, спокойно ждут (см. обработчик ошибок adhGetNextAutoNumber_Err) освобождения таблицы.
Q2 : Как заставить счетчик начать выдавать значения начиная с некоторой заданной величины?
Начиная с Аксесса 2000, можно запустить запрос наподобие такого:
Q3 : Может ли поле счетчика содержать повторяющиеся значения?
Q5 : Как сымитировать счетчик в отчете?
Заводим текстбокс и задаем ему свойства:
ControlSource = «=1»
RunningSum = Over All
Q6 : Как сымитировать счетчик в запросе на добавление?
Пишем функцию примерно такого вида:
В запросе обращаемся к ней дважды:
Q7 : Как сымитировать счетчик в обычном запросе либо ленточной форме?
Нумерация строк в запросе методами платформы
Простая реализация с помощью встроенных методов. Пригодится тем, кому нужно пронумеровать запрос без СКД и переборов.
просто ради прикола выполните несколько раз подряд запрос
результат бывает и такой
Артикул Номер Номер1
31 31
32 32
33 33
34 34
00000005691 35 35
36 36
37 37
00000006383 38 38
39 39
40 40
ВЫБРАТЬ ПЕРВЫЕ 10
Номенклатура.Артикул КАК Артикул,
АВТОНОМЕРЗАПИСИ() КАК Номер
ПОМЕСТИТЬ ТабАртикулы
ИЗ
Справочник.Номенклатура КАК Номенклатура
;
//////////////////////////////////////////////////////////// ////////////////////
ВЫБРАТЬ
ТабАртикулы.Артикул КАК Артикул,
АВТОНОМЕРЗАПИСИ() КАК Номер,
ТабАртикулы.Номер КАК Номер1
ПОМЕСТИТЬ ТабАртикулы2
ИЗ
ТабАртикулы КАК ТабАртикулы
;
Вы, конечно, не поверите, но ничего не меняется, выполняя ваш запрос N раз.
Допускаю, что при определенных условиях может возникать подобная ситуация, но я бы лучше перепроверил где-нибудь еще, чтобы исключить глюк системы.
Проверял на 8.3.13.1865
Вы, конечно, не поверите, но ничего не меняется, выполняя ваш запрос N раз.
Допускаю, что при определенных условиях может возникать подобная ситуация, но я бы лучше перепроверил где-нибудь еще, чтобы исключить глюк системы.
Функция предназначена для формирования поля с уникальным, последовательно возрастающим значением во временной таблице. Функцию можно использовать в том случае, если необходимо создать ключевое поле во временной таблице. Значение, сформированное этой функцией, будет уникально в пределах временной таблицы, при формировании которой использовалась функция. Начальное значение счетчика зависит от используемой СУБД и, в общем случае, может быть любым. Не гарантируется, что начальное значение счетчика будет равно 1 для любой временной таблицы.
Не поддерживается использование функции АВТОНОМЕРЗАПИСИ() в следующих случаях:
● в запросах, содержащих ОБЪЕДИНИТЬ на верхнем уровне,
● в запросах, которые не формируют временную таблицу,
● вне списка выборки,
● в выражениях языка запросов.
(5)»АВТОНОМЕРЗАПИСИ() КАК ПорядковыйНомер»
.
УПОРЯДОЧИТЬ ПО
ПорядковыйНомер
Так же заметно упрощаются алгоритмы покадрового вычисления и вывода результатов запросов!
хеш мне пока был без надоности.. а вот почему к ID записей объектных таблиц нельзя обращаться в запросах?
(37), Да «УПОРЯДОЧИТЬ ПО» нельзя применить во временной таблице без ключевого слова «ПЕРВЫЕ», но кто Вам мешает сделать вот так