【问题标题】:how to subtract same column of row where type is different?如何减去类型不同的行的同一列?
【发布时间】:2018-07-21 07:50:07
【问题描述】:

我想减去同一张表的行 where(where 子句不同)。

SELECT SUM(`balance`) AS `balance` FROM `vouchers`  WHERE `type`='CP' AND `post_status`='yes' GROUP BY `interactive_person`;

上面的查询给了我第一行的理想结果!第二个查询是

SELECT SUM(`balance`) AS `balance` FROM `vouchers`  WHERE `type`='CR' AND `post_status`='yes' GROUP BY `interactive_person`;

这些查询返回多于一行,按交互人员分组,我希望它减去交互人员(是数字)相同但类型更改的记录。简而言之,它就像 CashReceipt - CashPayment。我将第一个查询用作第二个的子查询,但错误显示子查询返回多于一行。我需要帮助来解决这个问题!

【问题讨论】:

  • 也许你在寻找 where_in

标签: php mysql accounting


【解决方案1】:

您可以使用case 在同一查询中计算您的sum()

SELECT 
SUM(CASE WHEN `type`='CP' THEN `balance` ELSE 0 END) AS CP_balance,
SUM(CASE WHEN `type`='CR' THEN `balance` ELSE 0 END) AS CR_balance,
SUM(CASE WHEN `type`='CP' THEN `balance` WHEN `type`='CR' THEN  -1 * `balance` ELSE 0 END) AS diff
FROM `vouchers`  
WHERE `post_status`='yes' 
GROUP BY `interactive_person`;

【讨论】:

  • 是的,我一直在寻找这种类型的查询,尽管您在 CR_balance 之后忘记了逗号“,”,但它仍然解决了我的问题,即使我在两天内一直在寻找它的解决方案
  • @ArsalanAfridi 很高兴它帮助了你,+1 用于突出语法问题
猜你喜欢
  • 2022-01-21
  • 1970-01-01
  • 2021-01-28
  • 2022-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多