select repair_types.rep_type as Вид_ремонта, mechanics.name as Механик, repairs.date as Дата, repairs.cost as Цена;
from repair_types inner join mechanics on repair_types.rep_id = mechanics.rep_id;
inner join repairs on repairs.mech_id = mechanics.mech_id;
where repairs.cost = (select max(cost) from repairs)
Результаты запроса представлены на рис. 25
Рис. 25. Результаты поиска самого дорогого ремонта
Поиск самого дешевого ремонта (form_q9.ButtonFind2.Click):
select repair_types.rep_type as Вид_ремонта, mechanics.name as Механик, repairs.date as Дата, repairs.cost as Цена;
from repair_types inner join mechanics on repair_types.rep_id = mechanics.rep_id;
inner join repairs on repairs.mech_id = mechanics.mech_id;
where repairs.cost = (select min(cost) from repairs)
Два следующих запроса выполняются для всех механиков или для каждого механика в зависимости от положения переключателя.
Поиск средней стоимости ремонта (form_q9.ButtonFind3.Click):
if form_q9.optiongroup1.optionAll.value = 1
select avg(cost) as Средняя_стоимость_ремонта from repairs
else
select mechanics.name as Механик, avg(repairs.cost) as Средняя_стоимость_ремонта;
from mechanics left join repairs on mechanics.mech_id=repairs.mech_id group by mechanics.mech_id
endif
Использование left join в данном запросе обусловлено тем, что в случае существования механика, не выполнявшего ремонт вообще, при использовании inner join в результирующей таблице запроса сведения о нем будут отсутствовать. Left join позволяет включить этих механиков в результат запроса. Средняя стоимость ремонта для таких механиков будет .NULL.
Результаты запроса по всем механикам представлены на рис. 26.
Рис. 26. Результаты поиска средней стоимости ремонта
Поиск машины со стоимостью ремонта в заданных пределах (form_q9.ButtonFind4.Click):
if form_q9.optiongroup1.optionAll.value = 1
select * from cars inner join repairs on cars.car_id=repairs.car_id;
where repairs.cost between val(form_q9.textCostMin.text) and val(form_q9.textCostMax.text)
else
select * from repairs inner join cars on repairs.car_id=cars.car_id inner join mechanics on repairs.mech_id=mechanics.mech_id;
where (repairs.cost between val(form_q9.textCostMin.text) and val(form_q9.textCostMax.text)) and mechanics.name = form_q9.listMechs.value
endif
Для поиска данных за период используется форма form_q10 (рис. 27)
Рис. 27. Форма для поиска данных за период
Функция Click кнопки “Найти” (form_q10.Command1):
if form_q10.optiongroup2.optionMonth.value=1
month_minus = 1
else
month_minus = 3
endif
if month(date()) <= month_minus
date_min = date(year(date())-1,12+month(date())-month_minus,day(date()))
else
date_min = date(year(date()),month(date())-month_minus,day(date()))
endif
if form_q10.optiongroup1.optionQuan.value=1
select cnt(cost) as Количество_отремонтированных_машин from repairs where repairs.date between date_min and date()
else
select avg(cost) as Средняя_стоимость_ремонта from repairs where repairs.date between date_min and date()
endif
Временной интервал отсчитывается от текущей даты. Второй блок if вычисляет правильную граничную дату date_min.
Результат поиска количества отремонтированных машин за квартал представлен на рис. 28.
Рис. 28. Результат поиска количества отремонтированных машин за квартал
Для поиска доли дешевых по стоимости ремонта машин используется форма form_q11 (рис. 29).
Рис. 29. Поиск дешевых по стоимости ремонта машин
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.