Mysql在第三个表上加入三个带WHERE的表

时间:2013-04-18 12:47:55

标签: mysql sql

我需要加入三张桌子才能显示以下内容 我可以加入前两个并使用此查询显示所有唯一的nominal_acc_no

SELECT nominal_acc_no,coa_name FROM
(
    SELECT nominal_acc_no ,coa_name FROM acc_chart_of_accounts
    UNION
    SELECT nominal_acc_no,coa_name FROM acc_chart_of_sub_accounts
) A;

但是我正在努力加入第三个并输出如下所示的结果。我需要GROUP ON nominal_acc_no和SUM debit&在acc_posting_details表中的company_id上使用WHERE信用。 任何和所有帮助表示赞赏。

 Acc_chart_of_accounts           
Coa_id   nominal_acc_no 
    1           10   
    2           20        

acc_chart_of_sub_accounts
coa_sub_id    nominal_acc_no  company_id
      1             10                 1
      2             20                 1
      3             110                1



Acc_posting_details
Id         nominal_acc_no   debit    credit  company_id
1              10           25.00                1
2              10           15.00                1
3              20                    30.00       1
4              110          10.00                1
5              110           8.00                1

Result
Nominal_acc_no        debit       credit    company_id
10                    40.00         -           1
20                      -         30.00         1
110                   18.00         -           1

3 个答案:

答案 0 :(得分:2)

SELECT
  acsa.nominal_acc_no,
  IFNULL(sum(apd.debit),0) AS debit,
  IFNULL(sum(apd.credit),0) AS credit,
  acsa.company_id
FROM acc_chart_of_sub_accounts AS acsa
  LEFT JOIN acc_posting_details AS apd
    ON acsa.nominal_acc_no = apd.Nominal_acc_no
GROUP BY acsa.nominal_acc_no, acsa.company_id

输出

Nominal_acc_no        debit     credit    company_id
-----------------------------------------------------
10                    40.00     0           1
20                    0         30.00       1
110                   18.00     0           1   

编辑:我的查询中修复了别名问题。

SQL Fiddle Demo Here

答案 1 :(得分:0)

SELECT Nominal_acc_no,SUM(debit) AS total_debit,SUM(credit) AS total_credit from   Acc_posting_details group by nominal_acc_no;

您可以在group by之前插入其他条件。

答案 2 :(得分:0)

您能否显示表格的完整结构,即所有列?

您的第一个SELECT语句引用表 acc_chart_of_accounts acc_chart_of_sub_accounts 中的列 coa_name ,但是您没有在说明中提及该列那些表格。这让我觉得可能还有其他相关信息缺失。

acc_chart_of_accounts acc_chart_of_sub_accounts 是否包含任何借记或贷记?如果没有,为什么你需要他们的信息?根据我对您的问题的理解,似乎 Acc_posting_details 包含您需要的所有信息:

  

“我需要GROUP ON nominal_acc_no并将借方和贷方用于汇总   在acc_posting_details表“

中的company_id上的位置

此查询是否解决了您的问题?

 SELECT Nominal_acc_no,
        SUM(debit) AS total_debit,
        SUM(credit) AS total_credit,
        company_id
 FROM Acc_posting_details
 WHERE company_id = 1
 GROUP BY nominal_acc_no;

增加:

如果我理解您的上次评论,则您需要为 acc_chart_of_accounts 中存在的每个 Nominal_acc_no 提供一行。

在这种情况下, Acc_posting_details 没有您需要的所有信息,因为某些名义帐户可能没有借记或贷记,因此它们不存在于 Acc_posting_details

 SELECT aca.Nominal_acc_no,
        IFNULL(SUM(apd.debit),0) AS total_debit,
        IFNULL(SUM(apd.credit),0) AS total_credit,
        aca.company_id
 FROM acc_chart_of_accounts aca
 LEFT OUTER JOIN Acc_posting_details apd
              ON aca.Nominal_acc_no = apd.Nominal_acc_no
 WHERE aca.company_id = 1
 GROUP BY aca.nominal_acc_no;

此查询会为 acc_chart_of_accounts 中的每个名义帐户提供一行。如果某个帐户在 Acc_posting_details 中有任何行,您将获得他们的信用和借记。对于 Acc_posting_details 中没有记录的帐户,您将在total_debit和total_credit列中获得0。

你说你想在WHERE clasue中使用company_id。或者,如果您想要对所有公司进行完整的报告,您将删除WHERE子句并用

替换GROUP BY子句。
 GROUP BY aca.nominal_acc_no, aca.company_id;

这是你在找什么?如果有效,请告诉我。