Создание базы данных для автопарка (“Машины”, “Механик”, “Ремонт”), страница 6

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. Поиск дешевых по стоимости ремонта машин