计算收入、费用、存款和取款表的损益

Posted

技术标签:

【中文标题】计算收入、费用、存款和取款表的损益【英文标题】:Calculate profit and loss from income, expense, deposite and whithdraw tables 【发布时间】: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 行的总和值)。发布你的表格设计,有更好的方法来解决这个问题。 表结构如下: 【参考方案1】:

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

你的整个设计没有意义。 你基本上必须实体,汽车和司机。 因此,您可以使用两个表,tblCar 和 tblDriver。 您可以使用 tblDriver 中的列来捕获交易类型(费用、取款、存款)。

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

【讨论】:

非常感谢您的建议先生,表格已标准化先生,但我在从表格中选择记录总和时遇到问题。 您的“驱动程序”表反映了不同类型的事务。最重要的是,这些都是事务,因此您的表肯定没有标准化。 你能不能写一个查询来解决这个问题,因为我已经花了一个月的时间开发基于这些表的应用程序。我会努力提高我的 sql 技能。谢谢亲爱的。【参考方案2】:

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

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

这样做将为您提供每个子表的查询,其中包含每个驱动程序的金额总和。然后,您所要做的就是创建最终查询,将驱动程序表与这些查询中的每一个链接(使用外部联接而不是内部联接)。

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

【讨论】:

我按照您说的创建了子查询,先生,但我不知道如何编写最终查询并将其链接到 [驱动程序表]。我再次需要您的帮助,先生 我能搞定先生,非常感谢你,没有你的帮助我做不到

以上是关于计算收入、费用、存款和取款表的损益的主要内容,如果未能解决你的问题,请参考以下文章

程序员二本毕业在华为外包工作3年,晒出收入和存款,还以为看错了

程序员二本毕业在华为外包工作3年,晒出收入和存款,还以为看错了

新开公司第一个月的第一笔会计分录应该如何做

80年至89年出生的你,现在是上班还是创业?大概月收入多少?存款多少了?

一张销售单一张增值税专用发票会计明细科目怎么写?

每个月有固定收入的程序员,银行里有一百万元的存款,生活水准如何?