Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Срочно нужна помощь в sql запросе, сложный sql запрос в access 
V
    Опции темы
yogin
Дата 11.6.2010, 23:13 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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 суток по цене января.

Помогите его составить. Высказывайте все варианты, я буду тестировать.
Заранее огромное спасибо всем помогающим. Очень срочно надо.
PM MAIL   Вверх
yogin
Дата 12.6.2010, 21:10 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0545 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.