计算收入、费用、存款和取款表的损益
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年,晒出收入和存款,还以为看错了