2013-06-25 5 views
0

Я работаю над созданием запроса, который начнется с базовой стоимостью $ 230, а затем возьмет количество родителей, которые приходят с каждым человеком, зарегистрированным в сеансе класса, и умножьте его на $ 55 (стоимость каждого родителя для участия в сеансе). Затем он проверяет сумму, на которую заплатил человек, и вычитает из общей суммы, которая была рассчитана. Моя проблема заключается в том, что мне также необходимо включить электронное письмо в каждую строку, и из-за этого мне нужно иметь часть запроса GROUP BY GuestEmail. С этой GROUP BY линия вызывает COUNT(Guest.ID) всегда возвращает 1, хотя в нескольких случаях он должен возвращать 2, 3 или 4.Изменение результата функции подсчета

SELECT Registration.ID, Guest.GuestEmail, 
    CASE 
     WHEN ((COUNT(Guest.ID) * 55) + 230) - SUM(DISTINCT Transaction.AuthorizationAmount) is not null 
      THEN ((COUNT(Guest.ID) * 55) + 230) - SUM(DISTINCT Transaction.AuthorizationAmount) 
     WHEN ((COUNT(Guest.ID) * 55) + 230) is not null AND SUM(DISTINCT Transaction.AuthorizationAmount) is null 
      THEN ((COUNT(Guest.ID) * 55) + 230) 
     WHEN ((COUNT(Guest.ID) * 55) + 230) is null AND SUM(DISTINCT Transaction.AuthorizationAmount) is not null 
      THEN - SUM(DISTINCT Transaction.AuthorizationAmount) 
     ELSE '0' 
    END AS Balance 

    FROM Registration 
    LEFT JOIN Transaction ON Registration.ID = Transaction.ID 
    LEFT JOIN Guest ON Registration.ID = Guest.ID 

    WHERE Registration.IsActive = 'True' AND Registration.ID = 111111 AND ConfirmationEmail = 0 AND Guest.IsActive = 'True' AND Registration.ID = Guest.ID 
    GROUP BY Registration.ID, Guest.GuestEmail 

Регистрация является таблица, которая содержит информацию студента в то время как гость содержит информацию родителя. Каждый родитель идентифицируется как родители своего ребенка через идентификатор, который содержится как в регистрации, так и в гостевой. Идентификатор - это одинаковое число как для родителя, так и для ученика. Transaction.AuthorizationAmount - это сумма, которую заплатил уже зарегистрированный человек. У гостей есть отдельная строка для каждого гостя. Возвращаемое электронное письмо является адресом электронной почты родителя, который хранится в гостевой таблице. Вопрос: Как я могу изменить запрос, чтобы вызвать COUNT(Guest.ID), чтобы возвращать числа, кроме 1?

+1

Если я один принимает класс, и я везу маму и папу , в какой таблице каждый из нас, и как ваш db идентифицирует их как моих гостей? Также, чей адрес электронной почты вы хотите вернуть? –

+0

@Dan Bracuk Обновлен мой вопрос, чтобы ответить на эти вопросы, но здесь он снова: Регистрация - это таблица, в которой хранится информация учащегося, в то время как гость содержит информацию о родителях. Каждый родитель идентифицируется как родители своего ребенка через идентификатор, который содержится как в регистрации, так и в гостевой. Идентификатор - это одинаковое число как для родителя, так и для ученика. Transaction.AuthorizationAmount - это сумма, которую уже заплатил зачисленный человек. У гостей есть отдельная строка для каждого гостя. Возвращаемое электронное письмо является адресом электронной почты родителя, который хранится в гостевой таблице. – Austin

+0

Если деньги относятся ко мне, вы уверены, что хотите отправить его своим гостям? –

ответ

1

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

SELECT r.ID, r.balance, g.GuestEmail 
FROM Guest g 
JOIN (
    SELECT Registration.ID, 
    CASE 
     WHEN ((COUNT(Guest.ID) * 55) + 230) - SUM(DISTINCT Transaction.AuthorizationAmount) is not null 
      THEN ((COUNT(Guest.ID) * 55) + 230) - SUM(DISTINCT Transaction.AuthorizationAmount) 
     WHEN ((COUNT(Guest.ID) * 55) + 230) is not null AND SUM(DISTINCT Transaction.AuthorizationAmount) is null 
      THEN ((COUNT(Guest.ID) * 55) + 230) 
     WHEN ((COUNT(Guest.ID) * 55) + 230) is null AND SUM(DISTINCT Transaction.AuthorizationAmount) is not null 
      THEN - SUM(DISTINCT Transaction.AuthorizationAmount) 
     ELSE '0' 
    END AS Balance 
    FROM Registration 
    LEFT JOIN Transaction ON Registration.ID = Transaction.ID 
    LEFT JOIN Guest ON Registration.ID = Guest.ID 
    WHERE Registration.IsActive = 'True' AND Registration.ID = 111111 AND ConfirmationEmail = 0 AND Guest.IsActive = 'True' AND Registration.ID = Guest.ID 
    GROUP BY Registration.ID 
) r ON (g.ID = r.ID) 
GROUP BY g.GuestEmail