|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Всем доброго дня! В таблицах и рекордсетах есть нумерация записей (в табличном режиме отображается внизу с кнопками перехода). Можно ли с этими номерами работать в SQL-коде, в частности, в качестве условия отбора? Например есть запрос, назовем Query1, для простоты такой: SELECT F1 FROM Table1. Необходимо разбить на 2 запроса: в 1м записи с 1 по 15, во 2м - с 16 по 30, в 3м - все остальные, начиная с 31. Или, может, как-то добавить поле с нумерацией, но не в источнике Table1, а в самом запросе Query1? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 07:20 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
BeliarВ таблицах и рекордсетах есть нумерация записей (в табличном режиме отображается внизу с кнопками перехода).Эти номера "проставляются" средством отображения и НЕ являются свойством набора записей или отдельной записи. BeliarМожно ли с этими номерами работать в SQL-коде, в частности, в качестве условия отбора?Соответственно нет. BeliarНапример есть запрос, назовем Query1, для простоты такой: SELECT F1 FROM Table1. Необходимо разбить на 2 запроса: в 1м записи с 1 по 15, во 2м - с 16 по 30, в 3м - все остальные, начиная с 31.Такое несложно делается соответствующей сортировкой и отбором заданной части набора. Для выбора "из серединки" используется двухуровневый отбор с подзапросом с сортировкой в обратном порядке. Beliarдобавить поле с нумерациейМожно. Подробно описано в FAQ... проще всего делается с помощью пользовательской функции. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 07:35 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Akina, В общем, я ожидал такой ответ :-) С функциями дело не очень обстоит, все с дефектами. Вот например: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
У этой счетчик растет при каждом обращении к запросу (т.е. при обновлении данных). Для смеха: границу окна запроса дергаешь - за несколько секунд от таких действий нумерация становиться шести-семизначной. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 08:11 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
BeliarУ этой счетчик растет при каждом обращении к запросу (т.е. при обновлении данных) Конечно. Вы же небось инициализируете функцию в подзапросе? а Аксесс не идиот и понимает, что функция дтерминированная, и это получается константное выражение - вот и не дёргает её при пересчёте. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 08:56 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
AkinaBeliarУ этой счетчик растет при каждом обращении к запросу (т.е. при обновлении данных) Конечно. Вы же небось инициализируете функцию в подзапросе? а Аксесс не идиот и понимает, что функция дтерминированная, и это получается константное выражение - вот и не дёргает её при пересчёте. Да не, в самом запросе... да ладно. Вот еще вариант: Запрос в виде Код: plsql 1.
Учитывая, что данные в F1 в моем случае уникальны, то срабатывает, как надо: нумерация при запуске запроса начинается с 1. Но при использовании данных в следующем запросе, где на поле num налагается условие, значения из num пропадают, хотя условия соблюдаются, и выборка правильная получается. А мне бы сохранить присвоенные номера. Подскажите еще способы нумерации. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 13:18 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Beliarзначения из num пропадаютНе понял фразы... ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 14:26 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
AkinaBeliarзначения из num пропадаютНе понял фразы... поле num пустое для всех записей ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 14:35 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Сваял свою функцию: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
где в качестве аргумента i в самом запросе подставляю (SELECT Count(Table1.F1) AS [Count-F1] FROM Query1;) Проблема та же: меняются номера, хоть и в пределах количества записей рекордсета ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 14:45 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Beliarполе num пустое для всех записей ни фига не понял... всё нормально передаётся по цепочке. ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 14:47 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
BeliarВсем доброго дня! В таблицах и рекордсетах есть нумерация записей (в табличном режиме отображается внизу с кнопками перехода). Можно ли с этими номерами работать в SQL-коде, в частности, в качестве условия отбора? Например есть запрос, назовем Query1, для простоты такой: SELECT F1 FROM Table1. Необходимо разбить на 2 запроса: в 1м записи с 1 по 15, во 2м - с 16 по 30, в 3м - все остальные, начиная с 31. Или, может, как-то добавить поле с нумерацией, но не в источнике Table1, а в самом запросе Query1? сначала задай себе вопрос - а что я буду делать с этими номерами строк?! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
10.04.2018, 15:36 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Akina, Да, я проверил, в таком простом случае, проблем нет. Но у меня вместо таблицы - запрос с группировкой данных. Для проверки сваял простой пример (во вложении) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 07:05 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
MaratIsk сначала задай себе вопрос - а что я буду делать с этими номерами строк?! :) сказано было Beliar... в частности, в качестве условия отбора... и в дальнейшем, долго объяснять, но эти номера будут использоваться, причем с типом Long ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 07:08 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Beliarу меня вместо таблицы - запрос с группировкой данных. Код: sql 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 07:50 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
AkinaBeliarу меня вместо таблицы - запрос с группировкой данных. Код: sql 1. 2. 3. 4.
Ну, в общем-то, работает И я нарыл еще один способ, описано так: Код: plsql 1. 2. 3.
поскольку DCount возвращает стринговые значения, т.е. в дальнейшем в условие отбора "between 1 and 10" входят только значения "1" и "10", то на нашем примере Код: plsql 1. 2. 3.
тоже все как надо получается, и по-моему весьма проще. Не могу сказать насчет производительность, при моих объемах не важно. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 08:26 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Нет, все-таки вариант Код: sql 1.
намного шустрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 13:53 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Beliarсказано было Beliar... в частности, в качестве условия отбора...и в дальнейшем, долго объяснять, но эти номера будут использоваться, причем с типом LongВы ответили,что будете использовать эти номера(а чем хуже ID в качестве условий отбора)Зачем??? Создается рекордсет на запросе(где уже все отобрано) и решается конечная задача(без всякой промежуточной нумерации) ... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 15:10 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
... |
|||
:
Нравится:
Не нравится:
|
|||
11.04.2018, 17:11 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
sdku, Здесь Вы анализируете объявленную в этой же процедуре i и предлагаете действие для каждой отдельной записи рекорсета, ну например дополнительному полю присваивать значение, скажем, того же i. Теоретически может получится нумерация, я обязательно проверю. Но даже если получится, неудобство в том, что полученный рекордсет нужно куда-то "всунуть", раз уж делаем это в VBA. У меня задача разделить выборку Query: Код: sql 1.
на три, скажем части: Query1: Код: sql 1.
Query2: Код: sql 1.
Query3: Код: sql 1.
) Ну а затем Код: sql 1. 2.
И этот рекордсет будет источником данных для отчета. Соединение "слева", потому что число записей варьируется от 1 до 90, а в отчете юзер должен видеть табличку 3х30. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 10:29 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Beliar, создайте вр.таблицу=вашей таблице+поле "группа",заполните его рекордсетом (для каждой группы записей какими либо значениями и при создании отчета используйте таблицу как источник а поле "группа" для группировки (если что-то не ясно покажите более-ли менее реальную таблицу а самое главное поясните 15 первых, с16 по 30 и больше 30 это при сортировке по какому признаку (ведь в таблице НЕТ какого-либо порядка записей) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 12:26 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
sdku, В том-то и дело, что не хочется долбаться с таблицей "временного хранения". Каждый раз долбать все записи и по-новой записывать... Сами исходные данные тоже из временной таблицы... Ну, еще был бы объем данных огромен или с накоплением, я бы, конечно, поработал бы с табличкой, тогда и помощь не понадобилась. sdkuа самое главное поясните 15 первых, с16 по 30 и больше 30 это при сортировке по какому признаку (ведь в таблице НЕТ какого-либо порядка записей) Нет никакой разницы в каком порядке будут нумероваться, номера нужны для деления на три выборки, и далее для их "склейки" в качестве столбцов таблички в отчете. У второго и третьего запроса num2 приводится к идентичности с num из первого запроса как раз для JOIN. Да впрочем, порядок записей не меняется, как было при добавлении в исходную таблицу отсортировано по алфавиту, так и остается. Но, повторюсь, это не существенно. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 13:05 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Вообще, задача решена, тему можно закрыть. Хотя я хотел бы проверить последний предложенный Вами вариант и обсудить ньюансы, если будут. Просто уже ради опыта. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 13:09 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19.
... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 13:43 |
|
Номера записей в таблице/запроса в SQL-коде
|
|||
---|---|---|---|
#18+
Меня заинтересовала вот эта фраза Beliar... поскольку DCount возвращает стринговые значения, т.е. в дальнейшем в условие отбора "between 1 and 10" входят только значения "1" и "10", то на нашем примере Код: vbnet 1. 2. 3.
Это же эпохальное открытие!!! Неужели никто не объяснил человеку, что Dcount всегда (!!!) возвращает числовые значения! Функцию DCount можно использовать для определения числа записей в указанном наборе записей (подмножестве). Она доступна в модулях Visual Basic для приложений (VBA), макросах, выражениях запросов и вычисляемых элементах управления. И с каких пор количество записей является символьной величиной? Или я что-то пропустил? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.04.2018, 15:19 |
|
|
start [/forum/topic.php?fid=45&msg=39629100&tid=1611525]: |
0ms |
get settings: |
7ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
43ms |
get topic data: |
8ms |
get forum data: |
3ms |
get page messages: |
60ms |
get tp. blocked users: |
1ms |
others: | 275ms |
total: | 417ms |
0 / 0 |