2016-05-13 11 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

folioTotalの合計フィールドのSUM()ではなくSUM()の合計を試しましたか? – Serge

+0

問題は何ですか?テーブルを私たちに教えてください。 –

+0

好きな場合は、この簡単な2ステップのアクション・コースを実行することを検討してください。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 
関連する問題