我的会计数据库中的Ledger表中有以下查询:
select lmatter
, ltradat
, llcode
, lamount
, lperiod
from ledger
where lmatter = '1234-ABCD'
and lzero <> 'R'
order by lperiod
结果是:
由此,我想知道是否可以创建最终结果:
我得到这些#的方式如下:
我们假设今天是2015年12月1日,我们正在计算2015年11月的数据。这使我们正在使用的 lperiod 作为“当前”等于'1115'
这是否可以在一个查询下使用子查询,甚至可能使用几个临时表?
答案 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