Php 基于计算结果在指定列上显示结果

Php 基于计算结果在指定列上显示结果,php,mysql,ms-access,Php,Mysql,Ms Access,我有2个db表:客户信息和余额 客户:客户ID,姓名 交易:客户ID、交易名称、交易金额。。。其他专栏,但我的问题不需要 预期查询输出示例: 说明:客户1有500.00的剩余余额,客户2有300.00的额外支付金额。这通常是负的 问题: 如何在单个查询中单独执行此操作?我只是想生成类似上述示例输出的报告,以显示结果金额(如果为正)作为负余额的借方余额和贷方余额,然后将使用Php处理结果 更新: 我过去常常对交易金额进行处理:我根据他们的交易名称汇总所有交易金额 i、 e 余额=所有交易记录\名称

我有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