[英]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查询从第一个表中选择所有 AccountNumber
( 18_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_journal
表2_1_journal
没有这样的专栏。 想用a.VatReturnRowNumberForDebitTurnover
以同样的方式为a.AccountNumber
(两列仅在18_8_ChartOfAccounts
。 a.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
当然,如果总和细节只是一个例子,你可以跳过GROUP_CONCAT()
部分,然后使用......
SELECT AccountNumber, COALESCE(SUM(Amount), 0) Total
...
只需使用此查询:
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.