SELECT tran.orderid, cust.name, (SUM(tran.quantity * item.unitprice) - orderpay.totalpay) as refund
FROM tran
LEFT OUTER JOIN item
ON tran.itemid = item.itemid
RIGHT OUTER JOIN orderpay
ON tran.orderid = orderpay.orderid
LEFT OUTER JOIN cust
ON cust.custid = orderpay.custid
WHERE (SUM(tran.quantity * item.unitprice) - orderpay.totalpay) > 0
GROUP BY tran.orderid
ORDER BY orderid ASC
我很好奇为什么这不起作用,它返回的错误状态:
不幸的是,我仅限于使用1 FROM子句。经过一些研究,我发现可以通过HAVING子句解决该错误,但是我无法使其正常工作。任何帮助,将不胜感激。
没有WHERE子句的输出很好,但是我试图过滤掉输出的退款列中的所有0.00。
如您所说,没有WHERE
子句,此代码才能正常工作的唯一方法是,每个组只有orderpay.totalpay
的值是1。如果是这种情况,则可以安全地用orderpay.totalpay
替换max(orderpay.totalpay)
并使用HAVING
子句:
SELECT tran.orderid, cust.name, (SUM(tran.quantity * item.unitprice) - MAX(orderpay.totalpay)) as refund
FROM tran
LEFT OUTER JOIN item
ON tran.itemid = item.itemid
RIGHT OUTER JOIN orderpay
ON tran.orderid = orderpay.orderid
LEFT OUTER JOIN cust
ON cust.custid = orderpay.custid
GROUP BY tran.orderid
HAVING (SUM(tran.quantity * item.unitprice) - MAX(orderpay.totalpay)) > 0
ORDER BY orderid ASC