Программирование в среде VisualFoxPro. Создание базы данных «Зоопарк», страница 7

 FROM  data1!animals as t1 LEFT JOIN data1!kind ON t1.kind_id = Kind.id WHERE t1.cost=(SELECT MIN(animals.cost) FROM data1!animals)

Средняя стоимость животного:

Найти среднюю стоимость животного.

Код запроса:

SELECT AVG(t.cost) as "Средняя_стоимость" FROM data1!animals as t

Количество животных в зоопарке:

Определить количество животных в зоопарке (в целом и по каждому виду).

Код запроса:

SELECT COUNT(t.id) as "Количество_животных", Kind.name as "Вид";

 FROM  data1!animals as t LEFT JOIN data1!kind ON t.kind_id = Kind.id GROUP BY t.kind_id;

  UNION;

SELECT COUNT(t2.id) as "Количество_животных", "По всем видам" as "Вид" FROM data1!animals as t2

Количество больных животных:

Определить количество больных животных.

Код запроса:

SELECT COUNT(t1.id) as "Количество_животных", "Больные" as "Статус";

 FROM  data1!animals as t1 WHERE t1.ill="Да"

Соотношение больных и здоровых животных:

Определить соотношение больных и здоровых животных (в процентах).

Код запроса:

SELECT COUNT(t.id) FROM data1!animals as t WHERE t.ill="Да" INTO ARRAY tmp

SELECT tmp[1]*100/COUNT(t2.id) as "Соотношение" FROM data1!animals as t2 WHERE t2.ill="Нет"

Животные, ожидающие потомства:

Определить количество животных, ожидающих потомства в зоопарке (в целом и по каждому виду).

Код запроса:

SELECT COUNT(t.id) as "Количество_животных", Kind.name as "Вид";

 FROM  data1!animals as t LEFT JOIN data1!kind ON t.kind_id = Kind.id WHERE t.pregnat="Да" GROUP BY t.kind_id;

  UNION;

SELECT COUNT(t2.id) as "Количество_животных", "По всем видам" as "Вид" FROM data1!animals as t2 WHERE t2.pregnat="Да"

Найти спонсоров:

Найти спонсоров заданного животного (кто оплачивает кормление заданного животного и в каких пределах).

Рис. 26. Форма для вывода спонсоров заданного животного.

Код метода Click кнопки «Найти»:

SELECT Animals.name as "Животное", Animals.sp_name as "Спонсор", Animals.sp_money_min as "Деньги_от", Animals.sp_money_max as "Деньги_до" ;

 FROM  data1!animals WHERE Animals.id=val(thisform.animal.value)

Найти поставщиков:

Найти поставщиков заданного вида продукции (выбор) для заданного животного (чем кормят, количество), стоимость продукции удовлетворяет заданным условиям (ввод стоимости).

Рис. 27. Форма для вывода поставщиков заданного вида продукции для заданного животного.

Код метода Click кнопки «Найти»:

SELECT Animals.name as "Животное", Products.name as "Продукт", Suppliers.name as "Поставщик", Deliveries.cost as "Стоимость";

 FROM  data1!eat INNER JOIN data1!deliveries ON Eat.deliver_id = Deliveries.id ;

    LEFT JOIN data1!animals ON Eat.animal_id = Animals.id ;

    LEFT JOIN data1!suppliers ON Deliveries.supplier_id = Suppliers.id ;

    LEFT JOIN data1!products ON Deliveries.product_id = Products.id ;

 WHERE Eat.animal_id=val(thisform.animal.value) AND ;

               Deliveries.product_id=val(thisform.product.value) AND ;

               Deliveries.cost>thisform.money_min.value AND ;

               Deliveries.cost<thisform.money_max.value ;

 ORDER BY Animals.name, Products.name

Составить меню кормления:

Составить меню кормления заданного животного в пределах установленной стоимости меню.

Рис. 28. Форма для составления меню кормления заданного животного.

Код метода Click кнопки «Найти»:

SELECT DISTINCT Deliveries.product_id;

 FROM  data1!eat LEFT OUTER JOIN data1!deliveries ON Eat.deliver_id = Deliveries.id ;

 WHERE Eat.animal_id=val(thisform.animal.value) INTO ARRAY products

 SELECT DISTINCT Deliveries.product_id;

 FROM  data1!eat LEFT OUTER JOIN data1!deliveries ON Eat.deliver_id = Deliveries.id ;

 WHERE Eat.animal_id=val(thisform.animal.value) INTO CURSOR cur2

cnt = reccount()

SELECT Animals.sp_money_max FROM data1!animals WHERE Animals.id=val(thisform.animal.value) INTO ARRAY COST_

FOR i = 1 TO cnt