2015-11-21 3 views
-1

Я пытаюсь вычислить сумму сумм и суммировать сумму в таблице i_payment_history, сравнивая результат с суммарной суммой «to_be_payed», сохраненной в таблице pt_bookings. Все задействованные поля десятичные (8,2), я попытался с помощью Cast becouse без работы не работает. Значение «Due» является результатом «to_be_payed» - «выплачено» , поэтому первое значение в столбце «Должно» должно быть 755,10-200,00 = 535,10. Почему «Due» вычисляет неправильное значение? Txs!Как напасть на псевдоним

SELECT i_payments_history.booking_id, Cast(SUM(amount)AS DECIMAL(8,2)) as payed, pt_bookings.booking_total, pt_bookings.booking_ref_no, (pt_bookings.booking_total - payed) as due 
FROM `i_payments_history` 
JOIN pt_bookings 
on pt_bookings.booking_id= i_payments_history.booking_id  
GROUP BY booking_id 

увидеть в ниже ПОС, что запрос возвращает

enter image description here

+2

'pay' - нерегулярный глагол, поэтому' pay' -> 'paid', а не' payed'. – dasblinkenlight

ответ

2

Повторите выражение:

SELECT ph.booking_id, Cast(SUM(ph.amount) AS DECIMAL(8,2)) as payed, b.booking_total, b.booking_ref_no, 
     (b.booking_total - SUM(ph.amount)) as due 
FROM `i_payments_history` ph JOIN 
    pt_bookings b 
    on b.booking_id = ph.booking_id  
GROUP BY b.booking_id; 

Псевдоним не может быть использован в том же select, где она определена. Один из вариантов - использовать подзапрос; другой - повторить выражение. Ваш запрос не возвратил ошибку, потому что одна из ваших таблиц должна иметь столбец с именем payed.

+0

Txs Gordon решил эту проблему – papacico

Смежные вопросы