Справка по запросам T-SQL Pt. II - PullRequest
1 голос
/ 10 апреля 2011

Последний запрос, в котором мне нужна помощь, касается конкретного бронирования, показывающего предварительную стоимость, которую должен будет заплатить гость.

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

Таблица бронирования гостей имеет следующие столбцы с данными:

(confirm_no, agent_id, g_name, g_phone)

В таблице бронирования есть следующие столбцы с данными:

(confirm_no, credit_card_no, res_checkin_date, res_checkout_date, 
 default_villa_type, price_plan)

В таблице счетов-фактур есть следующие столбцы с данными:

(inv_no, inv_date, inv_amount, confirm_no).

Ценовой планТаблица содержит следующие столбцы с данными:

(price_plan, rate, default_villa_type, bed_type)

Так что мне нужно каким-то образом перечислить имя гостя с общей суммой, которая будет равна ((res_checkout_date-res_checkin_date) * rate) + inv_amount из таблицы бронирования, таблицы цен и таблицы счетов-фактур соответственно(и имя гостя из таблицы бронирования гостей, которая связана через номер_фирмы).

уточнил, и я даже не уверен, с чего начать?

РЕДАКТИРОВАТЬ:

Таблица бронирования гостей выглядит так:

http://img535.imageshack.us/i/guestreservation.jpg/

Бронированиетаблица выглядит так:

http://img857.imageshack.us/i/reservation.jpg/

В таблице счетов в настоящее время НИЧЕГО нет.

Таблица ценовых планов выглядит следующим образом:

Я могу 'размещать более чем слишком много ссылок, но это то же самое, что и выше, с названием "priceplan.jpg"

Ответы [ 3 ]

1 голос
/ 10 апреля 2011

Нечто подобное может заставить вас двигаться в правильном направлении

select
  g.g_name, 
  datediff(d, r.res_checkin_date, r.res_checkout_date)*p.rate+coalesce(i.inv_amount, 0) as Amount
from reservation as r  
  inner join priceplan as p
    on r.price_plan = p.price_plan
  inner join guest_reservation as g
    on r.confirm_no = g.confirm_no
  left outer join invoice as i
    on r.confirm_no = i.confirm_no  
1 голос
/ 10 апреля 2011

Вы можете использовать DATEDIFF, чтобы вычислить количество дней, а затем использовать соединение, чтобы получить значения из каждой из таблиц.Таблица счетов может не иметь связанной строки для гостя, поэтому она должна быть внешним соединением.Внешнее соединение означает, что inv_amount может быть нулевым, поэтому вам нужно проверить это с помощью ISNULL.

SELECT gr.guest_name, (DATEDIFF(d, r.res_checkout_date, r.res_checkin_date) * pp.rate ) + ISNULL(i.inv_amount, 0)
FROM guest_reservation gr LEFT OUTER JOIN invoice i ON gr.confirm_no = i.confirm_no
JOIN reservation r ON gr.confirm_no = r.confirm_no
JOIN price_plan pp ON r.price_plan = pp.price_plan

ISNULL в msdn http://msdn.microsoft.com/en-us/library/ms184325.aspx DateDiff справка в msdn http://msdn.microsoft.com/en-us/library/ms189794.aspx

1 голос
/ 10 апреля 2011

Вам нужно выполнить ВНУТРЕННЕЕ СОЕДИНЕНИЕ по четырем таблицам и сделать свой расчет:

Как это (не проверено):

select 
  GuestReservationTable.g_name, ((ReservationTable.res_checkout_date-ReservationTable.res_checkin_date) * PricePlanTable.rate) + InvoiceTable.inv_amount
from
  GuestReservationTable
  inner join ReservationTable on GuestReservationTable.confirm_no = ReservationTable.confirm_no
  inner join InvoiceTable on InvoiceTable .confirm_no = ReservationTable.confirm_no
  inner join PricePlanTable on PricePlanTable.price_plan = ReservationTable.PricePlan
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...