带有SUM的SQL子查询

时间:2016-03-18 13:12:00

标签: tsql sql-server-2008-r2 subquery

我的会计数据库中的Ledger表中有以下查询:

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 作为“当前”等于'1115'

  • 物质ID 是一个独特的 lmatter
  • 上一页。 Bal 是SUM(FEES + HCOST) - SUM(PAY),其中 lperiod &lt;&gt; '1115'
  • 付款为SUM(PAY),其中 lperiod ='1115'
  • 当前费用为SUM(FEES + HCOST),其中 lperiod ='1115'
  • 到期金额 Prev.Bal - 付款 + 当前费用

这是否可以在一个查询下使用子查询,甚至可能使用几个临时表?

1 个答案:

答案 0 :(得分:3)

用例
你可以建立更高级的逻辑 对于Amount Due我会有嵌套查询

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