SQL Syntax error in case statement -
i have 2 database tables. 1 tracks placements of orders made company, , other tracks payments made company orders.
i'd create sql query, displays each order id, total amount order, , amount outstanding order, yet paid. customers allowed pay in 'instalments' say, purpose calculate total outstanding , display it.
here have far, returning 'null' when no payments have been made. means there no records based on specific order, , total amount paid customer = 0. therefore amount outstanding equal total amount.
i sql code display total amount of order when entire amount still outstanding, instead of null.
how can done?
i tried case statement think syntax wrong.
here's version without case statement, returns null when no payments have been made:
select pb_orders.id 'order id', pb_orders.order_total 'total', sum(pb_payments.amount) 'amount paid', pb_orders.order_total - sum(pb_payments.amount) 'outstanding amount' pb_orders inner join pb_payments on pb_orders.id = pb_payments.link_id pb_orders.id = 1556 and here attempt @ case statement:
select pb_orders.id 'order id', pb_orders.order_total 'total', sum(pb_payments.amount) 'amount paid' when 'amount paid' = 'null' 'amount paid' = pb_orders.order_total, pb_orders.order_total - sum(pb_payments.amount) 'outstanding amount', pb_orders inner join pb_payments on pb_orders.id = pb_payments.link_id pb_orders.id = 1555
you need coalesce() turn null values else:
select o.id orderid, o.order_total total, sum(p.amount) amountpaid, (o.order_total - coalesce(sum(p.amount), 0) ) outstandingamount pb_orders o inner join pb_payments p on o.id = p.link_id o.id = 1556; also note table aliases make query easier write , read.
i recommend never use single quotes define column aliases. bad habit leads trouble -- 1 day, refer column in single quotes, column interpreted string constant instead.
Comments
Post a Comment