【发布时间】:2018-09-07 17:23:51
【问题描述】:
我一直在尝试为 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
任何帮助将不胜感激。
【问题讨论】:
-
哇。那是很多子查询。
-
感谢先生编辑查询
-
是的,有很多子查询,但这是我得到的唯一不完美的解决方案
-
"记录是一些如何乘以其他表的行数。" - 它们以某种方式像这样成倍增加,因为您的脚本告诉它这样做。您在 from 子句中进行了巨大的交叉连接(您没有代码告诉它如何连接列出的 4 个表,以产生“一些如何相乘”的效果)。从您的查询中,我不得不猜测没有一个 ID 字段,而您只是将获得总和的数字相加(来自 t1* 表 2 中的 num 行 * 表 3 中的 num 行 * 表 4 中的 num 行的总和值)。发布你的表格设计,有更好的方法来解决这个问题。
-
表结构如下:
标签: sql ms-access sum inner-join aggregate-functions