【问题标题】:Arithmetic operators with SELECT, LEFT JOIN and WHERE clause带有 SELECT、LEFT JOIN 和 WHERE 子句的算术运算符
【发布时间】:2017-02-22 23:00:18
【问题描述】:

我需要帮助。我有下面的代码,它工作正常,但没有达到我的目标。我想要一个列“account_title”,在减法之前将其每个计算值放在一边,这最终应该给我减去值的差异。感谢期待。

SELECT
(
    SELECT SUM(amount)
    FROM mainaccount_a_2017
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_a_2017.joint_account_number)
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type)
    WHERE a_l_code = 'FA' AND dr_cr_action = 'DR'
)
-
(
    SELECT SUM(amount)
    FROM mainaccount_b_2017
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_b_2017.joint_account_number)
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type)
    WHERE a_l_code = 'FA' AND dr_cr_action = 'CR'
)

【问题讨论】:

  • 你为什么对我们大喊大叫?此处不适合以全部大写形式输入您的问题。它使文本更难阅读,很粗鲁,并且不会更快地为您提供帮助。查看主页的问题列表 - 除了您的问题,您还看到了多少个全部大写的问题?答案:没有,因为这样做是不合适的。请停下来。
  • 账户名从何而来?您没有按帐户对查询进行分组。
  • @Barmar Group By 很有帮助,但实际值仍未按预期对齐。
  • 谢谢。 :-) 另外,不要强迫我们与您一起回答 20 个问题来获取详细信息,如果您提供示例数据以及您尝试从该数据中获取的输出以及您的问题,这将非常有帮助。

标签: php mysql join


【解决方案1】:

将子查询改为account_title分组,然后加入。

SELECT debits.account_title, debits.total - credits.total AS net_reduction
FROM (
    SELECT mainaccount_a_2017.account_title, SUM(amount) AS total
    FROM mainaccount_a_2017
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_a_2017.joint_account_number)
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type)
    WHERE a_l_code = 'FA' AND dr_cr_action = 'DR'
    GROUP BY mainaccount_a_2017.account_title
) AS debits
JOIN (
    SELECT mainaccount_b_2017.account_title, SUM(amount) AS total
    FROM mainaccount_b_2017
    LEFT JOIN chart_of_account ON (chart_of_account.joint_account_numbers = mainaccount_b_2017.joint_account_number)
    LEFT JOIN asset_liability_income_expenditure_tbl ON (asset_liability_income_expenditure_tbl.a_l_code = chart_of_account.account_type)
    WHERE a_l_code = 'FA' AND dr_cr_action = 'CR'
    GROUP BY mainaccount_b_2017.account_title
) AS credits ON debits.account_title = credits.account_title

DEMO

【讨论】:

  • 谢谢你,但我收到了这条关于歧义#1052 - Column 'account_title' in field list is ambiguous的错误消息。我已经连接了 account_title 并翻转了一些东西。我想,你做的很接近,我能感觉到,但还没有……
  • 这意味着你在其他表中有account_title,所以你需要表前缀。我已经更新了答案以显示这一点。
  • 如果您在其他表中有帐户标题,则标准化不好。它应该只在帐户列表中。
  • @Barmar 条件聚合将避免代码重复。
  • @PaulSpiegel 我也这么认为,但它们是不同的表。 _a__b_.
猜你喜欢
  • 1970-01-01
  • 2021-03-17
  • 1970-01-01
  • 1970-01-01
  • 2011-01-30
  • 1970-01-01
  • 1970-01-01
  • 2015-08-21
  • 2017-05-05
相关资源
最近更新 更多