0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5

Создать сложный отчет - выборка по одному полю, группировка по другому

20.09.2015, 21:21. Показов 3198. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Уважаемые гуру !

Я новичок в Аксессе, так что прошу сильно не пинать.

Есть таблица с полями Рейс, дата, работа, категория.
Отчет надо создать за рейс и сгруппировать работы по категориям.

Я делал так: на каждую категорию работы создал запрос с критерием отбора по категориям, а потом создал пустой отчет и перенес туда один за одним все запросы.
Но у меня в отчете данные получаются за все рейсы.

Как можно ввести номер рейса, и чтобы в отчет попадали только данные за этот рейс ?
Может я слишком усложнил и можно все сделать проще ?
Подскажите пожалуйста...
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2015, 21:21
Ответы с готовыми решениями:

Совпадение по одному полю, но различие по другому
Добрый день! Снова нужна помощь! Имеется таблица с полем FIO и день рождения. Структура базы неверная, поэтому в одной таблице существует...

Группировка по одному полю, где другое одинаковое
Добрый день господа! Нужно сформировать группировку запроса, из такого: 01:00 | title#1 20:00 | title#1 20:00 | title#2 20:00...

Сортировка сначала по одному полю, а затем по другому
Есть в таблице запись с полями `num` и `comm_k` Надо сначала отсортировать по полю num , а потом (уже отсортированое) отсортировать по...

9
Эксперт MS Access
2835 / 1377 / 215
Регистрация: 13.05.2011
Сообщений: 4,219
20.09.2015, 21:37
avtandil33, Выкладывайте запакованный в зип или рар вариант вашей базы. Тогда без ошибок и без опечаток можно предоставить вариант.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
21.09.2015, 01:09
Цитата Сообщение от avtandil33 Посмотреть сообщение
Может я слишком усложнил и можно все сделать проще ?
Конечно, усложнил. Нужен всего один запрос. А в отчете сделать группировку по категориям. Вот и все.

Цитата Сообщение от avtandil33 Посмотреть сообщение
Как можно ввести номер рейса, и чтобы в отчет попадали только данные за этот рейс ?
Лучше всего это делать с формой. В форме задаете рейс в поле со списком, а в запросе-источнике отчета, в условии Where задаете фильтр по полю формы. Типа такого
SQL
1
WHERE Рейс=Forms!МояФорма!ПолеСоСпискомРейс
Но еще лучше вызывать отчет прямо из формы командой OpenReport. Это более гибко, поскольку можно задать не только один выбранный рейс, но и все. Примерно так (условный код на кнопке в процедуре клика)
Visual Basic
1
2
3
4
5
'Считаем, что если поле со списком рейсов пусто, то выдаются все рейсы, иначе только выбранный
'Также предполагается, что поле Рейс текстовое.
Dim reis
If Len(Me.ПолеСоСпискомРейс & "")=0 then reis="" Else reis="Рейс='" & ПолеСоСпискомРейс & "'"
Docmd.Openreport "ИмяОтчета", acViewPreview, ,reis
Добавлено через 1 час 5 минут
Впрочем, в запросе тоже несложно сделать, чтобы при пустом поле формы в отчет попадали все рейсы.
SQL
1
WHERE Рейс=Forms!МояФорма!ПолеСоСпискомРейс OR Forms!МояФорма!ПолеСоСпискомРейс IS NULL
1
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5
22.09.2015, 13:25  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Конечно, усложнил. Нужен всего один запрос. А в отчете сделать группировку по категориям. Вот и все.
Понял. Но мне нужно еще достаточно сложное форматирование, то есть перед каждой категорией добавить постоянный текст, а в случае если в данном рейсе работ по категории не было, то вывести текст, что работ не было.

Цитата Сообщение от mobile Посмотреть сообщение
Лучше всего это делать с формой. В форме задаете рейс в поле со списком, а в запросе-источнике отчета, в условии Where задаете фильтр по полю формы. Типа такого
SQL
1
WHERE Рейс=Forms!МояФорма!ПолеСоСпискомРейс
Вроде сделал, но кажется запрос не воспрнимает мой выбор из поля со списком - в отчет все время попадают данные только первого из рейсов, или там еще где-то надо прописать обработчик выбора рейса из поля ? И какое поле задавать - ListBox или ComboBox ?

Цитата Сообщение от mobile Посмотреть сообщение
Но еще лучше вызывать отчет прямо из формы командой OpenReport. Это более гибко, поскольку можно задать не только один выбранный рейс, но и все. Примерно так (условный код на кнопке в процедуре клика)
Visual Basic
1
2
3
4
5
'Считаем, что если поле со списком рейсов пусто, то выдаются все рейсы, иначе только выбранный
'Также предполагается, что поле Рейс текстовое.
Dim reis
If Len(Me.ПолеСоСпискомРейс & "")=0 then reis="" Else reis="Рейс='" & ПолеСоСпискомРейс & "'"
Docmd.Openreport "ИмяОтчета", acViewPreview, ,reis
Ну мне за все рейсы не надо.
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.09.2015, 13:46
Цитата Сообщение от avtandil33 Посмотреть сообщение
Но мне нужно еще достаточно сложное форматирование, то есть перед каждой категорией добавить постоянный текст, а в случае если в данном рейсе работ по категории не было, то вывести текст, что работ не было.
Это тоже достижимо. В запросе делаете дополнительное поле, которое по условию равно либо категории, либо сообщению, что в рейсе работ не было. В отчете в заголовке группы категории вставляете это поле. Типа такого (sql-фрагмент)
SQL
1
iif(nz([ПолеКоличестваРабот],0)=0, "Работ не было", [ПолеКатегории]) AS КатегорияЗаголовок
По поводу доп.поля с с постоянным текстом еще проще. В том же заголовке группы создаете свободное поле или надпись с этим тестом.

Цитата Сообщение от avtandil33 Посмотреть сообщение
Ну мне за все рейсы не надо.
Вам виднее, конечно. Но я легко могу представить себе ситуацию, когда нужна выборка за период или по нескольким рейсам. Без формы будет трудно реализовать
0
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5
22.09.2015, 15:00  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Это тоже достижимо. В запросе делаете дополнительное поле, которое по условию равно либо категории, либо сообщению, что в рейсе работ не было. В отчете в заголовке группы категории вставляете это поле. Типа такого (sql-фрагмент)
SQL
1
iif(nz([ПолеКоличестваРабот],0)=0, "Работ не было", [ПолеКатегории]) AS КатегорияЗаголовок
Не понял насчет ПоляКоличества Работ - можно поподробнее ?

Цитата Сообщение от mobile Посмотреть сообщение
По поводу доп.поля с с постоянным текстом еще проще. В том же заголовке группы создаете свободное поле или надпись с этим тестом.
Я неправильно поставил вопрос. Текст-то постоянный, но для каждой категории разный (поэтому-то я изначально и использовал кучу запросов и соответственно кучу отчетов, которые объединял в один).

Цитата Сообщение от mobile Посмотреть сообщение
Вам виднее, конечно. Но я легко могу представить себе ситуацию, когда нужна выборка за период или по нескольким рейсам. Без формы будет трудно реализовать
Согласен, пусть будет. Но вот насчет выборки - пока не получается...
0
Эксперт MS Access
26825 / 14505 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.09.2015, 15:19
Цитата Сообщение от avtandil33 Посмотреть сообщение
Не понял насчет ПоляКоличества Работ - можно поподробнее ?
Кроме Вас и всевышнего никто не знает Вашу работу. Я предположил, возможно неверное предположение, что есть некоторое поле с количеством работ по категории. Как на самом деле узнать/рассчитать суммарное количество работ по категории, я не знаю. Я не знаю Вашей БД. Может быть вместо поля надо опрашивать Count для некоторого поля в котором записываются работы. Если 0, то работ не было. И есть еще десятки гипотетических вариантов, которые с большой вероятностью не верны.

Цитата Сообщение от avtandil33 Посмотреть сообщение
Я неправильно поставил вопрос. Текст-то постоянный, но для каждой категории разный
Трудно конечно сказать определенно не видя БД. Я бы в справочнике категорий задал бы текст для каждой категории. Но если текст формируется по ситуации, тогда понятно почему куча запросов. Но Вы то определили его как постоянный. Отсюда рекомендация.
0
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5
22.09.2015, 15:40  [ТС]
Цитата Сообщение от mobile Посмотреть сообщение
Кроме Вас и всевышнего никто не знает Вашу работу. Я предположил, возможно неверное предположение, что есть некоторое поле с количеством работ по категории. Как на самом деле узнать/рассчитать суммарное количество работ по категории, я не знаю. Я не знаю Вашей БД. Может быть вместо поля надо опрашивать Count для некоторого поля в котором записываются работы. Если 0, то работ не было. И есть еще десятки гипотетических вариантов, которые с большой вероятностью не верны.
Ну я написал в начале темы - есть таблица, куда заносятся данные. В таблице - поля (у меня английская версия Access):

Nbr - ключевое поле, автонумерация работ
Cruise - текст, номер рейса
Day - дата/время, дата выполнения работы
Job - текст, описание работы
Category - текст,категория

Вот изначально и все. мне нужно делать отчет каждый рейс, работы сгруппированы по категориям, причем в отчете для каждой категории будет свой, но постоянный текст.
Если работ по данной категории за данный рейс не было, соответственно постоянный текст остается, но там, где список работ пишется фраза "Работ не было".

Цитата Сообщение от mobile Посмотреть сообщение
Трудно конечно сказать определенно не видя БД. Я бы в справочнике категорий задал бы текст для каждой категории. Но если текст формируется по ситуации, тогда понятно почему куча запросов. Но Вы то определили его как постоянный. Отсюда рекомендация.
А как это сделать ? Дело в том, что я всего второй раз в жизни занимаюсь Access... Или проще это сделать на Делфи, которым я владею чуть получше ?
0
Эксперт MS Access
 Аватар для alvk
7459 / 4592 / 302
Регистрация: 12.08.2011
Сообщений: 14,375
23.09.2015, 02:56
Цитата Сообщение от avtandil33 Посмотреть сообщение
А как это сделать ? Дело в том, что я всего второй раз в жизни занимаюсь Access... Или проще это сделать на Делфи, которым я владею чуть получше ?
Как выложить файл на форум? Или как в Дэльфи таблицы сваять?
1
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5
26.09.2015, 00:20  [ТС]
Цитата Сообщение от alvk Посмотреть сообщение
Как выложить файл на форум? Или как в Дэльфи таблицы сваять?
Ну мне дали совет :

Я бы в справочнике категорий задал бы текст для каждой категории. Но если текст формируется по ситуации, тогда понятно почему куча запросов. Но Вы то определили его как постоянный. Отсюда рекомендация.
Я нигде не нашел как это сделать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.09.2015, 00:20
Помогаю со студенческими работами здесь

Выборка записей из таблицы и группировка по полю
Приветствую. Есть таблица комментариев, в которой нас интересуют поля uid, user_id. Так вот, нужно выбрать из этой таблицы все уникальные...

Выборка совпадений по полю в БД и группировка данных
Есть таблица 'statistics', в таблице есть данные о пользователях 'id', 'sn', 'external_ip'. Нужно отобразить и сгруппировать всех...

В файле имеются 14 записей с полями. В начале отсортировать их по одному полю, потом по другому
Имеется файл, в котором есть поля: №(номер), ФИО, дата рождения, место работы, стаж. Подскажите, как написать программу, чтобы в начале...

Как создать сложный отчет?
Предметная область ИС: Производство I Создать простой отчет, содержащий: • список изделий с полями: Код, название, ...

Подсчет уникальных значений по полю с фильтром по другому полю
Добрый день! Есть два столбца. Хочу посчитать количество строк, но по первому условию отобрать записи в ячейках которых встречается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru