sum列给出了错误的输出

wswtfjt7  于 2021-06-15  发布在  Mysql
关注(0)|答案(1)|浏览(458)

我在执行和计算列的和时遇到了问题,但是代码显示了错误的输出。我试着解决这个问题 GROUP BY 同样也是错误的输出结果。我相信这是数据库中存在的公共行的执行次数。
我以前从未真正面对过这个问题。请帮助我,我如何解决这个问题,什么应该是正确的sql在php


* Table CR_table*

ID | credit | components_key
----------------------------
1  | 400    | 202012162458
----------------------------
2  | 300    | 202012162458

* Table DR_table*

ID | req_debit  | components_key
----------------------------
1  | 100    | 202012162458
----------------------------

SELECT DISTINCT SUM(credit)-SUM(req_debit) FROM CR_table LEFT JOIN DR_table ON CR_table.components_key = DR_table.components_key WHERE DR_table.transaction_type = 'OA' AND CR_table.components_key = '202012162458' GROUP BY CR_table.components_key

输出=500(但输出应为600)
期初余额

SELECT SUM(AMT) as OpeningBalance (SUM(CASE WHEN DR.insert_date < '2020-12-29' THEN CR.credit - DR.debit ELSE 0 END) FROM CR_table CR WHERE CR.components_key = '202012162458'
UNION ALL SELECT -req_debit AMT FROM DR_table DR WHERE DR.transaction_type = 'OA' AND DR.components_key = '202012162458') t  `but Opeing is also not working

`

vsaztqbk

vsaztqbk1#

当您连接两个表时,它正在生成 2(credit)*1(debit) = 2 records 其中你有两个不同的信贷和一个单一的借方重复在两行,所以你得到500( 400 + 300 - 100 - 100 )输出。
你也可以使用 UNION ALL 具体如下:

SELECT SUM(AMT) FROM
(SELECT credit AMT FROM CR_table CR  
 WHERE CR.components_key = '202012162458'
UNION ALL
SELECT -req_debit AMT FROM DR_table DR 
 WHERE DR.transaction_type = 'OA' 
   AND DR.components_key = '202012162458') t

相关问题