通过计算sql中其他列的SUM的差异将值插入第3列

时间:2013-06-17 16:38:09

标签: mysql xampp

我有一个运行Ok的查询但是没有创建所需的结果,我希望这个查询通过取第二列的SUM({{{{{{{ {1}})基于它的ACTION字符串(PAYABLE_AMOUNT_DUE)。我的表的结构如下所示,值为

TABLE PAYABLES

我使用的逻辑如下,但它没有将所需的值插入第三个表(因为它可以看到它始终为0)

查询

PAYABLE_AMOUNT

正如您可以看到它在PAYABLE_ACTIONINSERT INTO `payables`(`payable_action`, `payable_amount`, `payable_amount_due`) VALUES ('Cash Closed', '300', '(SELECT SUM(payable_amount) FROM payables WHERE payable_action = 'Cash In') - (SELECT SUM(payable_amount) FROM payables WHERE payable_action = 'Cash Closed') ') 中插入的值,而不是payable_amount中的值,我不知道为什么以及如何做到这一点?感谢

1 个答案:

答案 0 :(得分:1)

您可以尝试:

INSERT INTO payables( payable_action, payable_amount, payable_amount_due ) 
SELECT 'Cash Closed', '300', 
        SUM( payable_amount * (payable_action='Cash In' ) ) 
          - SUM( payable_amount * (payable_action='Cash Closed') ) 
FROM payables

编辑:这条线的作用是什么?

SUM( payable_amount * ( payable_action='Cash In' ) )

对于每一行(payable_action='Cash In')返回布尔值,但是对于布尔值,mysql只有0或1,因此我们将为满足动作条件的行添加总和payable_action * 1,为其他行添加payable_action * 0行。因此,基本上只有那些采取适当行动的人才会计算在内。