Форум программистов, компьютерный форум, киберфорум
Наши страницы
Microsoft Access
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
avtandil33
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5
1

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

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

Уважаемые гуру !

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

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

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

Как можно ввести номер рейса, и чтобы в отчет попадали только данные за этот рейс ?
Может я слишком усложнил и можно все сделать проще ?
Подскажите пожалуйста...
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.09.2015, 21:21
Ответы с готовыми решениями:

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

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

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

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

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

9
Вячеслав Я
Эксперт MS Access
2813 / 1356 / 214
Регистрация: 13.05.2011
Сообщений: 4,148
20.09.2015, 21:37 2
avtandil33, Выкладывайте запакованный в зип или рар вариант вашей базы. Тогда без ошибок и без опечаток можно предоставить вариант.
0
mobile
Эксперт MS Access
24690 / 13483 / 2872
Регистрация: 28.04.2012
Сообщений: 14,787
21.09.2015, 01:09 3
Цитата Сообщение от 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
avtandil33
0 / 0 / 0
Регистрация: 19.09.2015
Сообщений: 5
22.09.2015, 13:25  [ТС] 4
Цитата Сообщение от 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
22.09.2015, 13:25
mobile
Эксперт MS Access
24690 / 13483 / 2872
Регистрация: 28.04.2012
Сообщений: 14,787
22.09.2015, 13:46 5
Цитата Сообщение от avtandil33 Посмотреть сообщение
Но мне нужно еще достаточно сложное форматирование, то есть перед каждой категорией добавить постоянный текст, а в случае если в данном рейсе работ по категории не было, то вывести текст, что работ не было.
Это тоже достижимо. В запросе делаете дополнительное поле, которое по условию равно либо категории, либо сообщению, что в рейсе работ не было. В отчете в заголовке группы категории вставляете это поле. Типа такого (sql-фрагмент)
SQL
1
iif(nz([ПолеКоличестваРабот],0)=0, "Работ не было", [ПолеКатегории]) AS КатегорияЗаголовок
По поводу доп.поля с с постоянным текстом еще проще. В том же заголовке группы создаете свободное поле или надпись с этим тестом.

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

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

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

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

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

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

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

Я бы в справочнике категорий задал бы текст для каждой категории. Но если текст формируется по ситуации, тогда понятно почему куча запросов. Но Вы то определили его как постоянный. Отсюда рекомендация.
Я нигде не нашел как это сделать.
0
26.09.2015, 00:20
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2015, 00:20

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

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

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru