带有SUM的SQL子查询

3

我在我的会计数据库中有以下来自账单表的查询:

select  lmatter
        , ltradat
        , llcode
        , lamount
        , lperiod
from    ledger  
where   lmatter = '1234-ABCD'
        and lzero <> 'R'
order by lperiod 

结果如下:

结果是:

enter image description here

从这里,我想知道是否可能创建最终结果为:

enter image description here

我得到这些数字的方式如下:

我们假设今天是2015年12月1日,我们正在为2015年11月的数据计费。这使得我们正在处理的lperiod等于“current”为'1115'

  • Matter ID 是一个不同的lmatter
  • Prev. Bal 是SUM(FEES + HCOST)- SUM(PAY),其中lperiod<>'1115'
  • Payments 是SUM(PAY),其中lperiod= '1115'
  • Current Charges 是SUM(FEES + HCOST),其中lperiod= '1115'
  • Amount DuePrev.Bal - Payments + Current Charges

是否可能在一个查询中使用子查询或甚至使用一些临时表来实现这一点?

1个回答

3

应用场景
您可以构建更高级的逻辑
对于应付款项,我会编写嵌套查询

select *, prev - pay + current as 'DUE'
from 
(
select  lmatter
      , sum(case when lperiod <> '1115' and llcode in ('FEES', 'HCOST')  then  lamount  
                 when lperiod <> '1115' and llcode = 'PAY'               then -lamount   
            end) as 'prev'
      , sum(case when lperiod  = '1115' and llcode = 'PAY'                then  lamount  
            end) as 'payment' 
      , sum(case when lperiod  = '1115' and llcode in ('FEES', 'HCOST')  then  lamount     
            end) as 'current'             

from    ledger  
where   lmatter = '1234-ABCD'
and     lzero <> 'R'
group by by lmatter 
) as tt

这正是我所需要的。即使在多个事项层面上(不仅仅是声明“where lmatter ='xxxxx'”)。谢谢! - NCollinsTE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接