Условное количество связанных записей - PullRequest
4 голосов
/ 30 октября 2010

Я уверен, что должен быть простой способ сделать это, но я уже несколько часов рву свои волосы, и у меня ничего не получается. Вот рабочий запрос от утилиты листинга клиентов:

SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings
FROM customer c 
LEFT JOIN booking b 
ON c.customer_ID = b.customer_ID
WHERE customer_Live
GROUP BY c.customer_ID, surname, forenames, title
ORDER BY surname;

Вот проблема: COUNT возвращает все связанных бронирований. Но в таблице бронирования есть столбец booking_Live, который имеет значение false при отмене бронирования. Что мне нужно сделать, так это как-то исключить отмененные заказы из счета; поэтому, если у всех клиентов отменены бронирования, он вернет 0. Я попытался поместить предложение HAVING в группу, но это просто приводит к удалению любых клиентов с нулевым живым бронированием из вывода.

Ответы [ 2 ]

4 голосов
/ 30 октября 2010

Возможно, я не выздоровел, но почему бы тебе не использовать:

SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings
FROM customer c 
LEFT JOIN booking b 
ON (c.customer_ID = b.customer_ID AND b.booking_Live = true)
WHERE customer_Live
GROUP BY c.customer_ID, surname, forenames, title
ORDER BY surname;
3 голосов
/ 30 октября 2010

Подзапрос должен решить вашу проблему. Как то так.

SELECT c.customer_ID, title, surname, forenames, COUNT(booking_ID) AS bookings
FROM customer c 
LEFT JOIN (SELECT customer_ID, booking_id FROM Booking WHERE booking_live = true) as b 
ON c.customer_ID = b.customer_ID
WHERE customer_Live
GROUP BY c.customer_ID, surname, forenames, title
ORDER BY surname;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...