计算收入,支出,存款和转账表中的损益

时间:2018-03-28 21:26:16

标签: sql ms-access sum inner-join aggregate-functions

我一直试图找到一个sql查询的解决方案,以显示收入,费用,存款,提款的总和 并按驱动程序名称分组。 问题是,如果有一些记录 它没有显示任何东西。 但是,如果我在每张桌子上至少有一条记录 记录是一些如何乘以其他表的行数。我可以编写以下查询,但它不是最好和最完美的解决方案。

SELECT top 1  (SELECT Sum(CarIncome.income_amt)  FROM CarIncome )  AS [مجموع درآمد پیره های موتر ها],
 (SELECT Sum(DriverExpenses.driver_expense_amt) FROM DriverExpenses ) AS [مجموع مصارف درایور ها],
 (SELECT Sum(DriversDeposite.driver_deposite_amt) FROM DriversDeposite) AS [مجموع مبلغ حواله شده به درایور ها] ,
 (SELECT Sum(DriversWithdraw.driver_withdraw_amt) FROM DriversWithdraw ) AS [مجموع برداشت درایور ها],
 ((SELECT Sum(DriverExpenses.driver_expense_amt) FROM DriverExpenses ) +  (SELECT Sum(DriversDeposite.driver_deposite_amt) FROM DriversDeposite)) AS [مجموع مصارف و معاشات درایور ها],
 ((SELECT Sum(DriversDeposite.driver_deposite_amt) FROM DriversDeposite) - (SELECT Sum(DriversWithdraw.driver_withdraw_amt) FROM DriversWithdraw )) as [مجموع متباقی معاش قابل پرداخت درایور ها],
 ((SELECT Sum(CarIncome.income_amt)  FROM CarIncome ) -  ((SELECT Sum(DriverExpenses.driver_expense_amt) FROM DriverExpenses ) + (SELECT Sum(DriversDeposite.driver_deposite_amt) FROM DriversDeposite))) as [درآمد خالص موتر ها],
 (((SELECT Sum(DriversDeposite.driver_deposite_amt) FROM DriversDeposite) -(SELECT Sum(DriversWithdraw.driver_withdraw_amt) FROM DriversWithdraw )) + ((SELECT Sum(CarIncome.income_amt)  FROM CarIncome ) - ((SELECT Sum(DriverExpenses.driver_expense_amt) FROM DriverExpenses ) +  (SELECT Sum(DriversDeposite.driver_deposite_amt) FROM DriversDeposite)))) as [مجموع پول موجود در دست]
 FROM CarIncome, DriverExpenses, DriversDeposite, DriversWithdraw

任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

您的行数正在增加,因为您使用的是Cartesian product

你的整个设计没有意义。 你基本上有实体,汽车和司机。 所以你可以使用两个表,tblCar和tblDriver。 您可以使用tblDriver中的列来捕获事务类型(费用,提款,存款)。

我建议花一些时间研究规范化和基本SQL,并从头开始。

答案 1 :(得分:0)

由于您的SQL技能有限,请将问题分解为更小的问题。首先为每个子表创建保存的查询,如下所示:

SELECT DriverID, SUM(amt) AS Deposite FROM DriversDeposite GROUP BY DriverID

执行此操作将为您提供每个子表的查询,其中包含每个驱动程序的总和。然后,您所要做的就是创建最终查询,将您的驱动程序表与每个查询链接(使用OUTER JOIN而非INNER)。

您可以使用GUI完成所有这些操作,您不需要自己编写SQL代码。