![]() |
Модераторы: skyboy |
![]() ![]() ![]() |
|
yogin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Приветствую всех.
Друзья, срочно нужна помощь до понедельника по составлению запроса в access'е. СХЕМА И ПОЛЯ БАЗЫ ДАННЫХ: http://monax.vkurgane.com/files/dbase.jpg ИНФОРМАЦИЯ: В таблице HOTEL_PRICE каждому отелю соответствует 12 записей - 12 месяцев, в поле PRICE_DAY цена за сутки проживания для каждого месяца. Некоторые поля базы: hotel.month_num - номер месяца, от 1 до 12. hotel.price_day - цена за сутки проживания в отеле в определённом месяце.(для каждого отеля в этой таблице 12 записей) zakaz.viezd_date - дата выезда заказчика в формате (01.01.2010). zakaz.days_count - кол-во дней которые клиент проводит в отеле. ДЛЯ ПРИМЕРА: Я уже составил запрос вывода таблицы информации о заказчике путёвки(сформировал в конструкторе запросов access'а и посмотрел его текст, затем использую его в программе уже для добавления своих различных условий, связанных с фильтрами). Вот так он выглядит: SELECT client.family, client.name, client.otchestvo, client.pasport, client.zagran_pasport, client.zagran_pasport, client.viza, client.adres, client.telphone, client.day_b, client.month_b, client.year_b, zakaz.viezd_date, zakaz.days_count, hotel.id_curort, curort.name FROM ((curort INNER JOIN hotel ON curort.id_curort=hotel.id_curort) INNER JOIN zakaz ON hotel.id_hotel=zakaz.id_hotel) INNER JOIN client ON zakaz.id_zakaz=client.id_zakaz WHERE ((client.id_zakaz=zakaz.id_zakaz) And (client.id_zakaz=zakaz.id_zakaz) And (zakaz.id_hotel=hotel.id_hotel) And (hotel.id_curort=curort.id_curort)) AND (zakaz.viezd_date = :viezd) AND (family LIKE :family); Затем запрос, который возвращает поле allprice равное среднеарефметическому(AVG) значению стоимости по всем месяцам отеля(уже потом в отдельной операции я умножаю его на кол-во указанных дней пребывания в отеле, просто не знаю как это сделать в самом запросе - обычный знак умножения для access'а не покатил) и получаю типа цену проживания, но это не совсем правильно, т.к. среднеарифметическое берётся. SELECT AVG(hotel_price.price_day) AS [allprice] FROM hotel INNER JOIN hotel_price ON hotel.id_hotel = hotel_price.id_hotel WHERE ([hotel_price].[id_hotel]=[hotel].[id_hotel]) AND (hotel.id_hotel = :id_hotel Поэтому и бьюсь сейчас над правильным запросом. НЕОБХОДИМО СЛЕДУЮЩЕЕ: Узнать сумму проживания относительно указанных(в форме заполнения нового заказа) имени отеля(hotel.name), количества дней(zakaz.day_count) и месяца выезда(входит в zakaz.viezd_date) одним запросом. И второй запрос: Относительно указанной даты в фильтре, узнать сумму-прибыль отелю от всех людей, которые поехали в указанную дату. Т.е. для этого необходимы поля для каждого выехавшего клиента: имя отеля(hotel.name), количества дней пребывания(zakaz.day_count) и месяц выезда(входит в zakaz.viezd_date). Разницей цены за сутки между двумя месецами, в случае когда человек например выехал 30-ого января и пробыл там 10 дней(до 8 февраля, типа 2 дня январских, а 8 дней по февралю уже считаются), ПРЕНЕБРЕЧЬ, т.е. считать все 10 суток по цене января. Помогите его составить. Высказывайте все варианты, я буду тестировать. Заранее огромное спасибо всем помогающим. Очень срочно надо. |
|||
|
||||
yogin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Вопрос решил сам.
Ответы: запрос на список заказчиков: SELECT client.family, client.name, client.otchestvo, client.pasport, client.zagran_pasport, client.viza, zakaz.viezd_date, zakaz.days_count, hotel.name, hotel_price.month_num, hotel_price.price_day, hotel_price.month_num, hotel_price.price_day, curort.name, country.name, (zakaz.days_count * hotel_price.price_day) AS hotel_price FROM ((((country INNER JOIN curort ON country.id_country = curort.id_country) INNER JOIN hotel ON curort.id_curort = hotel.id_curort) INNER JOIN hotel_price ON hotel.id_hotel = hotel_price.id_hotel) INNER JOIN zakaz ON hotel.id_hotel = zakaz.id_hotel) INNER JOIN client ON zakaz.id_zakaz = client.id_zakaz WHERE ((Month([zakaz].[viezd_date])=[hotel_price].[month_num]) AND ([client].[id_zakaz]=[zakaz].[id_zakaz]) AND ([zakaz].[id_hotel]=[hotel].[id_hotel]) AND ((hotel_price.id_hotel)=[hotel].[id_hotel]) AND ((curort.id_curort)=[hotel].[id_curort]) AND ((country.id_country)=[curort].[id_country])) AND (client.family LIKE :fml) AND (zakaz.viezd_date = :vd) AND (hotel.name = :hm) запрос на общую сумму выбранного в таблице по фильтрам: SELECT SUM(hotel_price) AS allsum FROM ( SELECT client.family, client.name, client.otchestvo, client.pasport, client.zagran_pasport, client.viza, zakaz.viezd_date, zakaz.days_count, hotel.name, hotel_price.month_num, hotel_price.price_day, hotel_price.month_num, hotel_price.price_day, curort.name, country.name, (zakaz.days_count * hotel_price.price_day) AS hotel_price FROM ((((country INNER JOIN curort ON country.id_country = curort.id_country) INNER JOIN hotel ON curort.id_curort = hotel.id_curort) INNER JOIN hotel_price ON hotel.id_hotel = hotel_price.id_hotel) INNER JOIN zakaz ON hotel.id_hotel = zakaz.id_hotel) INNER JOIN client ON zakaz.id_zakaz = client.id_zakaz WHERE ((Month([zakaz].[viezd_date])=[hotel_price].[month_num]) AND ([client].[id_zakaz]=[zakaz].[id_zakaz]) AND ([zakaz].[id_hotel]=[hotel].[id_hotel]) AND ((hotel_price.id_hotel)=[hotel].[id_hotel]) AND ((curort.id_curort)=[hotel].[id_curort]) AND ((country.id_country)=[curort].[id_country])) ) WHERE client.family LIKE :fml AND zakaz.viezd_date = :vd AND hotel.name = :hm |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Составление SQL-запросов | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |