Как мне остановить мой запрос MySQL, генерирующий две строки для одной ссылки? - PullRequest
0 голосов
/ 06 сентября 2011

У меня есть следующий запрос MySQL, который получает все заказы для агента и все комнаты для бронирования и выполняет некоторые простые вычисления:

Select a.code, a.name, a.areacode, a.agentgroup, 
  Sum(br.basicprice) As TotalRevenueYTD, 
  Sum(b.adults + b.children + b.infants) As Pax,
  Count(br.bookingref) As Bookings
From booking_record br 
  Inner Join agent a On br.agentref = a.code
  Inner Join bookingroom b On b.bookingref = br.bookingref
Where br.bookingdate > '2011-01-01' And br.bookingdate < Date(Now())
Group By br.agentref

Таблицы представлены так, как для booking_record1 агент (agentref -> a.code).У агента может быть много бронирований, а в бронировании может быть много комнат.В этом конкретном случае мой доход и бронирование отображаются неверно, потому что, если в одном бронировании более 1 комнаты, строка возвращается более одного раза (и, как таковая, базовая цена учитывается дважды, резервирование учитывается дважды и т. Д.).

Есть идеи, как вернуть верную информацию?

Спасибо, Даниэль.

1 Ответ

2 голосов
/ 06 сентября 2011

Как насчет?

SELECT a.code, a.name, a.areacode, a.agentgroup
       , Sum(br.basicprice) As TotalRevenueYTD
       , sum(b1.pax) As Pax
       , Count(br.bookingref) As Bookings
FROM booking_record br 
INNER JOIN agent a On br.agentref = a.code 
INNER JOIN (
  SELECT b.bookingref, Sum(b.adults + b.children + b.infants) as pax 
  FROM bookingroom b 
  GROUP BY b.bookingref) AS b1 ON b1.bookingref = br.bookingref
WHERE br.bookingdate >= '2011-01-01' 
  AND br.bookingdate <= Date(Now())
GROUP BY a.code

Обратите внимание, что, как указывает @JNK, этот код основан на предположении, что a.code является уникальным или первичным ключом таблицы agent.Если это так, он будет работать правильно.
Если это не так, это даст неопределенные результаты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...