实际上我正在我的项目中创建一个收据表格,现在我已经清除了日期明智的账单,但现在我还有一个疑问。如果我在该范围内的1/6/17 - 15/6/17选择user1账单,金额的总和将显示为10,000卢比。现在user1支付5000现在如何在第二次付款时在user1显示余额金额。
[注意:User1已于1月6日17日至2017年3月17日购买。 ]
select
sum(TotalValue) bal
from(
select
ISNULL(sum(s.NetAmount),0) TotalValue
from Sales as s
where s.ConsumerID=56
and s.SaleDate='2017/06/10'
and s.SaleDate='2017/06/30'
union all
select - ISNULL(sum(s.Amount),0) TotalValue
from Receipt as s
where s.ConsumerID=56
) n
我的查询没有给出确切的输出。
如何在此代码中重写以获取输出。
提前致谢..,
在我的销售表记录中,2017年6月1日至2017年6月30日期间列(netamount)值的总和为36000。
现在我输入第一张收据。所以我首先检查我的用户账单金额,写这个嵌套查询,当我的用户选择以3个会费支付前10天的金额。
例如1/6/17 - 10/6/17总金额为15000.在第一次收据中,用户支付了5000.
在第二个条目中,我获得金额的值是10000但查询返回31000
答案 0 :(得分:0)
您可以尝试下面的SQL
;WITH cte_sales
AS (SELECT s.consumerid
,Isnull(Sum(s.netamount), 0) TotalSalesValue
FROM sales AS s
WHERE s.consumerid = 56
AND s.saledate >= '2017/06/10'
AND s.saledate <= '2017/06/30'
GROUP BY s.consumerid),
cte_recipt
AS (SELECT r.consumerid
,Isnull(Sum(r.amount), 0) TotalReceiptValue
FROM receipt AS r
WHERE r.consumerid = 56
GROUP BY r.consumerid)
SELECT a.consumerid
,a.totalsalesvalue - Isnull(totalreceiptvalue, 0) balance
FROM cte_sales a
LEFT JOIN cte_recipt b
ON a.consumerid = b.consumerid
GROUP BY a.consumerid
另一种解决方案是
SELECT s.consumerid ,Isnull(Sum(s.netamount), 0) - Isnull(Sum(r.amount), 0) as balance
FROM sales AS s
left join receipt AS r
on s.consumerid = r.consumerid
WHERE s.consumerid = 56
AND s.saledate >= '2017/06/10'
AND s.saledate <= '2017/06/30'
您需要确定哪个具有更好的SQL执行计划