2016-05-13 152 views
-3

我试图对使用别名和分组方式的选择列执行计算。查询低于(在从之前的行问题):SUM使用别名和组选择列

select r.res_id, 
    r.arrive_date, 
    r.depart_date, 
    r.res_type, 
    if(DATEDIFF(r.depart_date, r.arrive_date) >29, 'LT', 'ST') as 'StayType', 
    SUM(r.rent + r.fee_arr_early + r.fee_dep_late + r.fee_peace_waiver + r.fee_pool + r.city_tax + r.fee_cleaning + r.fee_pet + r.fee_tshirt + r.fee_misc + r.fee_non_tax + r.fee_processing + r.fee_travel_ins + r.fee_event + r.fee_cancel) as 'folioTotal', 
    coalesce((select SUM(g.amount) from guest_payments as g where g.resId = r.res_id and charge_type = 'charge' and approved = 'Y'),0) as 'payments', 
    coalesce((select SUM(g.amount) from guest_payments as g where g.resId = r.res_id and charge_type = 'credit' and approved = 'Y'),0) as 'credits', 
    (SUM('folioTotal') - SUM('payments') + SUM('credits')) as 'folioBalance' 
from reservations as r 
    join guest_payments as g 
     on r.res_id = g.resId 
     group by r.res_id 

我试过把这个内部的另一个总和与相同的结果。

+0

您是否尝试使用sum()的sum()而不是sum()作为folioTotal的总和字段? – Serge

+0

问题是什么?向我们展示你的表格。 –

+0

如果您愿意,请考虑遵循以下简单的两步操作步骤:1.如果您尚未这样做,请提供适当的CREATE和INSERT语句(和/或sqlfiddle),以便我们可以更轻松地复制问题。 2.如果您尚未这样做,请提供与步骤1中提供的信息相对应的所需结果集。 – Strawberry

回答

0

我当时很愚蠢,我在单蜱里面引用别名,这就是为什么它没有计算。解决方案:

select r.res_id, 
    r.arrive_date, 
    r.depart_date, 
    r.res_type, 
    g.entry_date, 
    if(DATEDIFF(r.depart_date, r.arrive_date) >29, 'LT', 'ST') as 'StayType', 
    (select SUM(r.rent + r.fee_arr_early + r.fee_dep_late + r.fee_peace_waiver + r.fee_pool + r.city_tax + r.fee_cleaning + r.fee_pet + r.fee_tshirt + r.fee_misc + r.fee_non_tax + r.fee_processing + r.fee_travel_ins + r.fee_event + r.fee_cancel) from reservations as r where r.res_id = g.resId) as 'folioTotal', 
    coalesce((select SUM(g.amount) from guest_payments as g where g.resId = r.res_id and charge_type = 'charge'),0) as 'payments', 
    coalesce((select SUM(g.amount)* -1 from guest_payments as g where g.resId = r.res_id and charge_type = 'credit' and approved = 'Y'),0) as 'credits', 
    (select folioTotal - payments + credits) 
from reservations as r 
    join guest_payments as g 
     on r.res_id = g.resId 
     group by r.res_id