Форум программистов, компьютерный форум, киберфорум
Наши страницы
MS Access
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
Sollare
4 / 4 / 1
Регистрация: 21.03.2010
Сообщений: 33
1

"Перекрестный" запрос для отчета

24.05.2010, 18:03. Просмотров 7254. Ответов 23
Метки нет (Все метки)

Подскажите как решить вот такую проблему:
В общих чертах, есть такие таблицы

Контрагенты
ID_Контрагента, Название, Адрес

Автомобили
ID_Автомобиля Номер_ТС

Маршрутный лист
ID_Листа, ID_Контрагента, ID_Автомобиля, Количество вывезенных контейнеров, Дата

Нужно построить отчет наподобие того, что во вложенной картинке.

Не по теме:


Верхняя строка от середины-направо цифры 1, 2, 3, 4 и так до 31 - это дни
084, 643, 967 - это номера Транспортных средств
Цифры в отчетах для дней - которые почти все 0 - это вывезенные контейнеры



Этот отчет выводит количество контейнеров, вывезенных за месяц, причем подробно показывает их количество для каждого дня.
Я не знаю, как нужно организовать запрос, чтобы вывелось такое, почему то при виде такой таблицы в голову приходит словосочетание "перекрестный запрос") Но вот как построить его - не знаю, уже много раз пытался - не получается...

Подскажите, пожалуйста, а то даже не знаю кого спросить
0
Миниатюры
"Перекрестный" запрос для отчета  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.05.2010, 18:03
Ответы с готовыми решениями:

Как сделать чтобы через запрос заполнялись характеристики поля: "значение по умолчанию", "формат rtf", "описание"?
SQL запрос создаёт таблицу. create table Группы (КодГруппы COUNTER...

Преобразование даты при выводе отчета с "24.06.2014" на "06.2014"
Доброго времени суток форумчане! Возникла небольшая проблема, прошу помочь в...

Запрос на добавление в таблицу "Учащиеся" новое поле "Стипендия"
Доброе время суток!Помогите пожалуйста решить задачку. Необходимо создать...

Нужно в аксессе выполнить запрос. Прописать условие отбора от "А" до "Я"
Здравствуйте, може подсказать. Почему то оператор Like "A*" And Like "Я*"...

"Развернуть" запрос для перекрестного запроса или . ?
Хочу в заголовки столбцов перекрёстного запроса поставить все дни текущего...

23
Sollare
4 / 4 / 1
Регистрация: 21.03.2010
Сообщений: 33
09.06.2010, 17:48  [ТС] 21
Новая трабла. Есть форма, на ней, допустим 3 поля.
Первое ID_Контрагента
Второе - Название улицы (значение берем из запроса условно Select ID_Контрагента, Название_Улицы)
но для этого поля указан присоединенный столбец 1 и когда мы выбираем значение в Первом поле, во втором улица выбирается автоматически, согласно ID
Третье - Вывоз_по_плану (запрос условно Select ID_Контрагента, Вывоз_План)
В нем, когда выбираем значение из первого поля указывается вывоз по плану, характерный для этого контрагента. Но, мне нужно просуммировать этот Вывоз_План в примечанию к форме, а я не могу этого сделать, т.к. Третье поле содержит не число Вывоз_План, а ID_Контрагента, хоть и выводит Вывоз_План... Когда делаю четвертое поле, и в нем указываю Данные =[Третье], то выводит ID.
Как мне просуммировать именно Вывоз_План?
0
Sollare
4 / 4 / 1
Регистрация: 21.03.2010
Сообщений: 33
24.06.2010, 13:22  [ТС] 22
Вот хотел узнать еще одну вещь.
Есть, значится, форма, картинка прилагается. В этой форме есть подчиненная форма (список из контрагентов). Так вот, эти расписания составляются на каждый день, и выходит так, что все они повторяются. Можно ли сделать, чтобы при нажатии кнопки, в пустую форму загружался шаблон из какого либо дня?
Я впринципе себе это так представляю - вбиваю дату нужного дня (или ID_Маршрутного_Листа), нажимаю кнопку, условно "Загрузить", и далее идет выборка из таблицы "Маршрутные_Графики", где Маршрутные_Графики.ID_Маршрутного_Листа = [Поле_ID_Маршрутного_Листа]. Далее, по идее должна быть вставка найденного из М_Г списка в эту же таблицу, но под новым ID_Маршрутного_Листа, и обновление формы, чтобы вывести результат. Все это по идее делается в VBA, но я с ним на Ваше Величество, так что если возможно - подскажите)
0
Миниатюры
"Перекрестный" запрос для отчета  
Sollare
4 / 4 / 1
Регистрация: 21.03.2010
Сообщений: 33
07.07.2010, 13:24  [ТС] 23
Решил так:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
Private Sub Загрузить_Лист_Click()
 
  strSQL = "INSERT INTO Маршрутные_Графики " & _
  "(ID_Маршрутного_Листа, ID_Контрагента, Вывоз_Факт, Расход_ГСМ, Примечание) " & _
  "SELECT " & Me.[ID_Маршрутного_Листа_Текущий] & ", ID_Контрагента, 0, 0, '' " & _
  "FROM Маршрутные_Графики WHERE (Маршрутные_Графики.ID_Маршрутного_Листа=" & Me.[Поле_ID_Маршрутного_Листа] & ")"
 
  CurrentDb.Execute strSQL
  Me.[Маршрутный_Лист_Строка].Form.Requery
 
 
End Sub
Далее возник еще вопрос:

Нужно было на форме сделать поле со списком контрагентов, чтобы при выборе контрагента и выбора промежутка даты на форме, подсчитывалось количество вывезенных контейнеров. Оказалось, что самая заковырка - в оформлении даты. Вобщем, это вызов запроса на форме, с учетом нескольких параметров.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Public Function SumKontragentTBO(idkontr)
 
Dim s
  
  s = "SELECT Sum([Вывоз_Факт])" _
  & " FROM ((Контрагенты AS k INNER JOIN Маршрутные_Графики AS m ON k.ID_Контрагента = m.ID_Контрагента) INNER JOIN Маршрутные_Листы AS ml ON m.ID_Маршрутного_Листа = ml.ID_Маршрутного_Листа) INNER JOIN (Виды_Отходов AS oth INNER JOIN Автомобили AS auto ON oth.ID_Вид_Отхода = auto.ID_Вид_Отхода) ON ml.ID_Автотранспорта = auto.ID_Автотранспорта" _
  & " WHERE m.ID_Контрагента=" & Me.ID_Контрагента & " AND ml.Дата >=#" & Format(Me.[Дата_Начало], "mm\/dd\/yy hh\:mm\:ss") & "# And ml.Дата <=#" & Format(Me.[Дата_Конец], "mm\/dd\/yy hh\:mm\:ss") & "# AND oth.Вид_Отхода='ТБО';"
 
  SumKontragentTBO = CurrentProject.Connection.Execute(s).Fields(0)
  
  If (IsNull(SumKontragentTBO)) Then
  SumKontragentTBO = 0
  End If
  
End Function
Правда тут еще у меня проверка по виду отходов (из таблицы Виды_Отходов), но главное, чтобы поняли как с датой тут работать.

______________________________________________________
Далее нужно было сделать примерно то же, но чтобы в перекрестном запросе были столбцы, в которых считаются количество вывезенных контейнеров (Вывоз_Факт), но с учетом того, что их вывозят машины, которые вывозят ТБО или КГО.

Visual Basic
1
КолТБО: -Sum(([Вид_Отхода]='ТБО')*[Вывоз_Факт])
Вот, как он работает:
Воспользовавшись фактом, что True=-1, а False=0, в выражении суммы попали только слагаемые, у которых [Вид_Отхода]='ТБО'. Остальные были умножены на 0 и, соответственно, такой же их вклад в сумму. Но! Те слагаемые, для [Вид_Отхода]='ТБО', попали со знаком минус (ибо выражение =-1), следовательно общее выражение нужно дасть с обратным знаком - умножить на минус единицу.
0
Teslenko_EA
1166 / 619 / 37
Регистрация: 30.05.2010
Сообщений: 712
07.07.2010, 22:06 24
Здравствуйте Sollare.
позвольте дать Вам пару рекомендаций.
1. "..[Вид_Отхода]='ТБО', попали со знаком минус.." - сделайте Abs([Вид_Отхода]='ТБО')
2. SumKontragentTBO = Nz(CurrentProject.Connection.Execute(s).Fields(0), 0) избавит от необходимости проверки If (IsNull..
3. MS Access не самый лучший "инструмент" для создания "отчетов-простыней", формируйте массивы и выкладывайте на шаблон документа Excel.
Евгений.
1
07.07.2010, 22:06
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.07.2010, 22:06

Запрос на количество просроченных дней для БД "Видеопрокат"
Кто нибудь может помочь сделать запрос на количество просроченных дней для БД...

Запрос на выборку для "старого самовара" ПОМОГИТЕ!)
Всем добрый день, вечер, утро. в программировании я тот самый самовар. НО...

БД "Автосервис". Запрос для расчета общей суммы стоимостей услуг и деталей
Есть база данных автосервис, в таблице заказ есть поле &quot;общ стоимость&quot;, в нем...


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

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

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