Php 基于计算结果在指定列上显示结果
我有2个db表:客户信息和余额 客户:客户ID,姓名 交易:客户ID、交易名称、交易金额。。。其他专栏,但我的问题不需要 预期查询输出示例: 说明:客户1有500.00的剩余余额,客户2有300.00的额外支付金额。这通常是负的 问题: 如何在单个查询中单独执行此操作?我只是想生成类似上述示例输出的报告,以显示结果金额(如果为正)作为负余额的借方余额和贷方余额,然后将使用Php处理结果 更新: 我过去常常对交易金额进行处理:我根据他们的交易名称汇总所有交易金额 i、 e 余额=所有交易记录\名称“销售额”减去-全部 交易名称“付款”Php 基于计算结果在指定列上显示结果,php,mysql,ms-access,Php,Mysql,Ms Access,我有2个db表:客户信息和余额 客户:客户ID,姓名 交易:客户ID、交易名称、交易金额。。。其他专栏,但我的问题不需要 预期查询输出示例: 说明:客户1有500.00的剩余余额,客户2有300.00的额外支付金额。这通常是负的 问题: 如何在单个查询中单独执行此操作?我只是想生成类似上述示例输出的报告,以显示结果金额(如果为正)作为负余额的借方余额和贷方余额,然后将使用Php处理结果 更新: 我过去常常对交易金额进行处理:我根据他们的交易名称汇总所有交易金额 i、 e 余额=所有交易记录\名称
但这将迫使我创建虚拟表作为报告的存储库表,并创建更多php条件进行比较和插入。我想不出比这更简单的方法:
SELECT c.customer_id, pos.amount debit_balance, neg.amount credit_balance
FROM customer c
LEFT JOIN (SELECT SUM(t.transaction_amount) amount, t.customer_id
FROM transaction t
WHERE t.transaction_amount > 0
GROUP BY t.customer_id) pos ON pos.customer_id = c.customer_id
LEFT JOIN (SELECT SUM(t2.transaction_amount) amount, t2.customer_id
FROM transaction t2
WHERE t2.transaction_amount < 0
GROUP BY t2.customer_id) neg ON neg.customer_id = c.customer_id
第一个子查询汇总每个客户的所有正值,而第二个子查询汇总所有负值。然后得到所有客户,并将两个对应的值合并为一个结果。我将使用以下内容:
SELECT C.customer_id, C.Name,
IF(SUM(Transaction_Amount)>0, SUM(Transaction_Amount),'') as Debit_Balance,
IF(SUM(Transaction_Amount)<=0, SUM(Transaction_Amount),'') as Credit_Balance
From Customer As C
LEFT JOIN Transaction As T ON C.customer_id = T.customer_id
GROUP BY T.customer_id
您希望每个客户都有一行输出,余额在一列或另一列中,取决于它是正的还是负的。如果我们使用的是标准SQL,请尝试:
select
subqry.Customer_ID
, case
when subqry.Balance >= 0 then subqry.Balance
end as Debit_Balance
, case
when subqry.Balance < 0 then subqry.Balance * -1
end as Credit_Balance
from (
select
Customer_ID
, sum(
case Transaction_Name
when 'SALES' then Transaction_Amount
when 'PAYMENT' then Transaction_Amount * -1
else null
end
) as Balance
from Transaction
group by Customer_ID
) as subqry
目前无需加入客户表,因为我们没有在任何地方使用客户名称。您自己尝试过什么吗?@juergend我尝试将SumTransaction金额作为借方余额,将SumTransaction金额作为贷方余额,但结果是有两列值。如果存在的话,我认为这应该是条件查询。谢谢,但我结束了为额外的php处理创建虚拟表的过程。上述查询将导致重复输出。e、 g.借方余额和贷方余额都有我不想看到的w/c值。我只需要这两个字段中的任意一个字段的值,而不是两个字段的值:谢谢
select
subqry.Customer_ID
, case
when subqry.Balance >= 0 then subqry.Balance
end as Debit_Balance
, case
when subqry.Balance < 0 then subqry.Balance * -1
end as Credit_Balance
from (
select
Customer_ID
, sum(
case Transaction_Name
when 'SALES' then Transaction_Amount
when 'PAYMENT' then Transaction_Amount * -1
else null
end
) as Balance
from Transaction
group by Customer_ID
) as subqry