SELECT SUM(numberofsales) as numberofsales,SUM(salevalue)
FROM (
--handle sales with refunds
SELECT count(sales) as numberofsales, sum(sales.value-refunds.value) as salevalue
FROM Transactions sales
LEFT JOIN transactions refunds ON sales.transid=refunds.refundid
WHERE refunds.refundid IS NOT NULL
AND sales.value-refund.value>0
AND sales.date>@begindate
AND sales.date<@enddate
AND sales.refund_flag='s'
UNION
--handle sales without refunds
SELECT count(sales) as numberofsales, sum(sales.value) as salevalue
FROM Transactions sales
LEFT JOIN transactions refunds ON sales.transid=refunds.refundid
WHERE refunds.refundid IS NULL
AND sales.date>@begindate
AND sales.date<@enddate
AND sales.refund_flag='s')
这是第一次与解决方案的主要特点。 它使用SQL Server语法,我不确定sql server和mysql之间的区别。
根据michael667的回答以上,你可以看到自我加入以获得每笔销售的退款。 我不认为组是必需的。
此解决方案不会确保每次销售只有一次退款,并且实际上如果有多个退款,这会影响此解决方案的正确性。
辉煌,指出我在正确的方向! –