繁体   English   中英

MySQL从一个表的列中选择一些值(不是所有值),并根据所选值在其他表中求和值

[英]MySQL select some values (not all values) from column of one table and depending on the selected values sum values in other table

第一个表(名为18_8_ChartOfAccounts ),帐号如此

AccountNumber | VatReturnRowNumberForDebitTurnover
--------------------------------------------------
 1            |    not_blank
 2            |
 3            |    not_blank

第二个表(名为2_1_journal )就像这样

Amount | DebitAccount
----------------------
5     |  1
80    |  2
3     |  3
4     |  1
20    |  3

试图获得以下内容:如果VatReturnRowNumberForDebitTurnover不为空/非空白, DebitAccount与(等于) AccountNumber相同的Amount

或者想得到这样的输出:

Account number | Total
---------------------------
1              | 9 (5+4)
3              | 23 (20+3)

不需要为帐户2回显Total,因为对于帐户2 VatReturnRowNumberForDebitTurnover为空/空

这个mysql查询从第一个表中选择所有 AccountNumber18_8_ChartOfAccounts

SELECT a.AccountNumber, IFNULL( d.Amount, 0 ) AS Amount 
FROM 18_8_ChartOfAccounts AS a 
LEFT JOIN ( SELECT DebitAccount, SUM( Amount ) AS Amount 
FROM ( SELECT * FROM 2_1_journal) DATA 
GROUP BY DebitAccount ) 
d ON (a.AccountNumber = d.DebitAccount)

但需要选择只AccountNumber s其中VatReturnRowNumberForDebitTurnover不为空/空

试图修改mysql查询

SELECT a.AccountNumber, IFNULL( d.Amount, 0 ) AS Amount 
FROM 18_8_ChartOfAccounts AS a 

WHERE VatReturnRowNumberForDebitTurnover <> ''

LEFT JOIN ( SELECT DebitAccount, SUM( Amount ) AS Amount 
FROM ( SELECT * FROM 2_1_journal) DATA 
GROUP BY DebitAccount ) 
d ON (a.AccountNumber = d.DebitAccount)

获取Syntax error or access violation: ... near 'LEFT JOIN ( SELECT DebitAccount ....

然后更改FROM 18_8_ChartOfAccounts AS a WHERE VatReturnRowNumberForDebitTurnover <> ''

to FROM 18_8_ChartOfAccounts WHERE VatReturnRowNumberForDebitTurnover <> '' AS a并得到类似的错误。

然后改为这样的代码:

SELECT a.AccountNumber, IFNULL( d.Amount, 0 ) AS Amount 
FROM 18_8_ChartOfAccounts AS a 
LEFT JOIN ( SELECT DebitAccount, SUM( Amount ) AS Amount 
FROM ( SELECT * FROM 2_1_journal) DATA 
WHERE a.VatReturnRowNumberForDebitTurnover <> "" 
GROUP BY DebitAccount ) 
d ON (a.AccountNumber = d.DebitAccount)

并获取Unknown column 'a.VatReturnRowNumberForDebitTurnover'

2_1_journal2_1_journal没有这样的专栏。 想用a.VatReturnRowNumberForDebitTurnover以同样的方式为a.AccountNumber (两列仅在18_8_ChartOfAccountsa.AccountNumber工作, a.VatReturnRowNumberForDebitTurnover没有。

请,建议需要修改的内容

这应该工作;

SELECT AccountNumber, 
       CONCAT(SUM(Amount), ' (', GROUP_CONCAT(Amount SEPARATOR '+'), ')') Total
FROM 18_8_ChartOfAccounts
LEFT JOIN 2_1_journal
  ON AccountNumber = DebitAccount
WHERE VatReturnRowNumberForDebitTurnover IS NOT NULL
GROUP BY AccountNumber

一个要测试的SQLfiddle

当然,如果总和细节只是一个例子,你可以跳过GROUP_CONCAT()部分,然后使用......

SELECT AccountNumber, COALESCE(SUM(Amount), 0) Total
...

另一个SQLfiddle

只需使用此查询:

SELECT a.AccountNumber, SUM( b.Amount ) AS Amount
  FROM 18_8_ChartOfAccounts AS a 
     LEFT JOIN 2_1_journal AS b ON a.AccountNumber = b.DebitAccount
        WHERE a.VatReturnRowNumberForDebitTurnover IS NOT NULL
        GROUP BY b.DebitAccount;
select
ca.AccountNumber,
sum(j.Amount)
from
18_8_ChartOfAccounts ca
left join 2_1_journal j on ca.AccountNumber = j.DebitAccount
where 
ca.VatReturnRowNumberForDebitTurnover is not null
group by ca.AccountNumber

看到它在sqlfiddle中工作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM