Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Microsoft Office (Word, Excel, Outlook и т.д.) (http://forum.oszone.net/forumdisplay.php?f=115)
-   -   Группировка по выражению (http://forum.oszone.net/showthread.php?t=231123)

veter48 23-03-2012 23:31 1885564

Группировка по выражению
 
Здравствуйте, нужна помощь по созданию отчёта в MS Access 2010. Идея очень простая есть таблица клиенты и покупки, и надо группировать клиентов по количеству покупок (группировка по выражению). Например, 5 покупок клиент 1., 5., 6., и.т.д. Как это сделать? Спасибо.

Iska 24-03-2012 00:14 1885587

veter48, суть, как я понимаю, сводится не к отчёту, а к построению правильного запроса.

На примере идущей в поставке базы данных «Борей» (я не знаю, включена ли она в поставку Office 2010, у меня — Office 2003; потому буду приводить скриншоты) требуемый запрос вида «Клиенты-Заказы» будет выглядеть примерно так:



что соответствует запросу:
Код:

SELECT Клиенты.Название AS Клиент, Count(Заказы.КодЗаказа) AS [Количество заказов]
FROM Клиенты INNER JOIN Заказы ON Клиенты.КодКлиента = Заказы.КодКлиента
GROUP BY Клиенты.Название
ORDER BY Count(Заказы.КодЗаказа) DESC;

который приводит к следующим результатам:



Оно?

veter48 24-03-2012 11:49 1885718

Ну как сделать запрос я знаю. Меня интересует именно отчет мне надо сделать такой отчет:
1 покупка
клиент
клиент
клиент
2 покупки
клиент
клиент
клиент

3 покупки
клиент
клиент
клиент
Надо группировать клиентов по Count()

Iska 24-03-2012 12:57 1885751

Цитата:

Цитата veter48
Ну как сделать запрос я знаю. Меня интересует именно отчет мне надо сделать такой отчет: »

Отлично. Теперь Вам надо, воспользовавшись конструктором, построить отчёт на основе созданного запроса:



После того, как отчёт будет открыт в конструкторе отчётов, Вам нужно будет добавить группировку по полю «Количество заказов» (из предыдущего примера):



(как это сделать — для Вашей версии смотрите здесь: Общие сведения об отчетах - Access - Office.com: Добавление группировки, сортировки и итогов). Не забудьте в этом же окне указать создание в отчёте раздела заголовка для указанной группы (нижний красный овал на скриншоте).

После этого осталось лишь добавить в отчёт в нужные разделы потребные поля и добавить «шашечки» в виде оформления:



В итоге Вы должны получить примерно такой вид отчёта:



Естественно, можно не создавать отдельный запрос, а использовать его текст в свойстве «Источник записей» самого отчёта.

veter48 24-03-2012 18:29 1885880

Цитата:

Естественно, можно не создавать отдельный запрос, а использовать его текст в свойстве «Источник записей» самого отчёта.
Именно так мне и надо, только как то не получается.

Iska 24-03-2012 18:44 1885891

Цитата:

Цитата veter48
как то не получается. »

veter48, что именно не получается?

veter48 24-03-2012 20:16 1885919

Спасибо, с этим я разобрался. Теперь есть следующий вопрос. Я хочу, чтоб под каждым клиентом показывались даты покупок, я создал text box и в contorl source пишу запрос:
Код:

= SELECT [Orders].[OrderDate] FROM [Orders] Where [Orders].[ClientID] = [ClientIDtxt]
([ClientIDtxt] text box где хранится ИД пользователя)
Но выкидывают ошибку.

Iska 25-03-2012 04:48 1886148

Цитата:

Цитата veter48
Спасибо, с этим я разобрался. »

Отлично! Правда, Вы по-прежнему молчите, есть ли в Office 2010 такой пример, как база данных «Борей». Жду ответа.

Цитата:

Цитата veter48
Я хочу, чтоб под каждым клиентом показывались даты покупок, я создал text box и в contorl source пишу запрос: »

Результат запроса не может быть отображён в данном элементе управления.

Вам потребуется создать Отчёт/Форму и вставить его в область данных текущего отчёта как элемент управления «Подчинённый отчёт/форма», связав его с данными текущего отчёта по нужному полю.


Итак, первым делом нам нужно изменить исходный запрос так, чтобы он включал поле будущей связи «КодКлиента» из таблицы «Клиенты»:
читать дальше »


(или соответствующим же образом добавить это поле в запрос, содержащийся в свойстве «Источник данных» самого отчёта).


Затем мы создаём подчинённый отчёт в текущем отчёте при помощи элемента управления «Подчинённый отчёт/форма», вставляя его в область данных:


Проходя по страницам Мастера, мы указываем следующее:


На соответствующем шаге Мастера указываем поля для связи текущего отчёта и подчинённого отчёта (мы ведь уже поправили запрос, не так ли?)


Не забываем задать в свойствах полученного элемента управления «Подчинённый отчёт» свойство «Расширение» равным «Да»:


После этого сохраняем и закрываем текущий отчёт, открываем подчинённый отчёт в Конструкторе отчётов и приводим его к следующему виду:

оставляя единственное поле «ДатаИсполнения» в области данных. Всё прочее удаляем, сохраняем и закрываем отчёт.

Готово!

okshef 25-03-2012 11:59 1886248

Цитата:

Цитата Iska
есть ли в Office 2010 такой пример, как база данных «Борей» »

Iska, есть, в "полноустановленной" версии. Но даже если нет - всегда можно скачать с сайта Office

Iska 25-03-2012 19:50 1886517

okshef, спасибо, ясно.

Оно: Download: Access 2000 Tutorial: Northwind Traders Sample Database - Microsoft Download Center - Download Details и более свежий: Download: NorthWind and pubs Sample Databases for SQL Server 2000 - Microsoft Download Center - Download Details [по последней ссылке только базы под SQL]?

okshef 25-03-2012 20:08 1886534

Не знаю точно. Как-то так. И на русском

veter48 25-03-2012 21:59 1886628

Цитата:

Iska, есть, в "полноустановленной" версии. Но даже если нет - всегда можно скачать с сайта Office
Да именно так.

Iska 25-03-2012 22:29 1886657

okshef, после добавления в запрос «2007» и я нашёл: Борей 2007 - Шаблоны - Office.com. Правда, сам я им всё равно пока не смогу пользоваться из-за более старой версии Microsoft Office. Так что, буду использовать в примерах базу, идущую в непосредственно поставке (она хотя бы локализована).

veter48 28-03-2012 23:56 1888909

Извиняюсь, есть еще вопрос, как группировать по интервалу, допустим 1-2 покупок 3-4 итд?

Iska 30-03-2012 15:58 1890093

Цитата:

Цитата veter48
как группировать по интервалу, допустим 1-2 покупок 3-4 итд? »

1. Группировку по полю «Количество заказов» осуществляете не по полному значению, а по интервалу со значением «2».
2. Поле «Количество заказов» в заголовке группы делаете невидимым в отчёте (Макет -> Вывод на экран: «Нет»).
3. Добавляете на его место свободное поле с именем «Интервал».
4. В процедуру обработки секции заголовка этой группы добавляете код для формирования содержимого свободного поля «Интервал»:
Код:

Private Sub ЗаголовокГруппы0_Format(Cancel As Integer, FormatCount As Integer)
    Me.Интервал = CStr(Me.Количество_заказов - Me.GroupLevel(0).GroupInterval + 1) & "-" & CStr(Me.Количество_заказов)
End Sub

В итоге получаете примерно следующее:



Время: 07:25.

Время: 07:25.
© OSzone.net 2001-