Sql 改变计数函数的输出

Sql 改变计数函数的输出,sql,Sql,我正在创建一个查询,该查询将以230美元的基本成本开始,然后将每个参加课程的人的家长人数乘以55美元(每个家长参加课程的成本)。 然后,它将检查参加会议的人迄今为止支付的金额,并将从刚刚计算的总成本中减去该金额。 我的问题是,我还需要在每行中包含电子邮件,因此我需要查询的groupbyguestemail部分。使用此groupby行可以使COUNT(Guest.ID)始终返回1,即使在多个情况下它应该返回2、3或4 SELECT Registration.ID, Guest.GuestEmail

我正在创建一个查询,该查询将以230美元的基本成本开始,然后将每个参加课程的人的家长人数乘以55美元(每个家长参加课程的成本)。 然后,它将检查参加会议的人迄今为止支付的金额,并将从刚刚计算的总成本中减去该金额。 我的问题是,我还需要在每行中包含电子邮件,因此我需要查询的
groupbyguestemail
部分。使用此
groupby
行可以使
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
注册表包含学生信息,而来宾包含家长信息。通过注册和来宾中包含的ID,将每位家长标识为其子女的家长。家长和学生的ID都是相同的号码。 Transaction.AuthorizationAmount是注册人员已支付的金额。每位客人都有单独的一排。返回的电子邮件是存储在来宾表中的家长电子邮件。
问题:如何更改查询以使
COUNT(Guest.ID)
返回除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

如果是我来上课,我带着妈妈和爸爸,我们每个人都坐在哪一张桌子上,你们的db如何确定他们是我的客人?还有,你想返回谁的电子邮件地址?@Dan Bracuk更新了我的问题以回答这些问题,但这里又是:注册是保存学生信息的表格,而来宾保存家长信息。通过注册和来宾中包含的ID,将每位家长标识为其子女的家长。家长和学生的ID都是相同的号码。Transaction.AuthorizationAmount是注册人员已支付的金额。每位客人都有单独的一排。返回的电子邮件是存储在来宾表中的家长电子邮件。如果这些钱属于我,你确定要邮寄给我的来宾吗?是的,我的老板要邮寄给每个人