我有两个表
顺序
prod_id qty gst gst_rate
1 25 yes 18
1 25 no 0
2 10 yes 12
3 5 no 0
返回
prod_id add less gst_rate
1 5 0 0
1 10 0 18
3 0 2 0
关于表ORDER
产品1的订单为25,GST 18%,无国内商品及服务税(GST)的订单25。产品 2具有GST 12%的订单10。产品3具有无国内商品及服务税的顺序5。
关于表Return
没有GST的产品1具有额外的数量5.产品1带GST的产品1具有额外的 QTY 10.产品3(没有GST)的数量2.产品2没有额外的或 少量。
因此,我必须为ORDER
表中的每个条目创建 View
结果应该看起来像这样
prod_id qty gst_rate add less
1 25 18 10 0
1 25 0 5 0
2 10 12 0 0
3 5 0 0 2
我尝试的是:
SELECT ord.prod_id, ord.qty, ord.gst_rate, ret.add, ret.less FROM order ord LEFT JOIN (SELECT case when ord.gst='no' then (select sum(add) from return,order where order.prod_id=return.prod_id and return.gst_rate=0) else (select sum(add) from return,order where order.prod_id=return.prod_id and return.gst_rate!=0) end as add FROM return) as ret ON ret.prod_id=ord.prod_id
但是它不起作用。
您查询可以重构避免子查询..
SELECT ord.prod_id, ord.qty, ord.gst_rate,
case when rd.gst='no' then t1.sum_add else t2.sum_add end as add
FROM order ord
LEFT JOIN (
select prod_id, sum(add) as sum_add
from return
INNER JOIN order ON order.prod_id=return.prod_id and return.gst_rate=0
GROUP BY prod_id
) t1 on t1.prod_id = ord.prod_id
LEFT JOIN (
select prod_id, sum(add) as sum_add
from return
INNER JOIN order ON order.prod_id=return.prod_id and return.gst_rate!=0
GROUP BY prod_id
) t2 on t2.prod_id = ord.prod_id
(不在您的代码中,我已经被Select省略了)