SQL 带 SUM 的子查询
SQL Subquery with SUMs
我的会计数据库中的分类帐 table 有以下查询:
select lmatter
, ltradat
, llcode
, lamount
, lperiod
from ledger
where lmatter = '1234-ABCD'
and lzero <> 'R'
order by lperiod
结果是:
据此,我想知道是否可以创建最终结果:
我得到这些#的方式如下:
我们假设今天是 2015 年 12 月 1 日,我们正在为 2015 年 11 月的数据计费。这使得我们正在使用的 lperiod 作为 "current" 等于 '1115'
- 案件 ID 是一个不同的 l 案件
- 上一条Bal 是 SUM(FEES + HCOST) - SUM(PAY) 其中 lperiod <> '1115'
- Payments 是 SUM(PAY) 其中 lperiod = '1115'
- 当前费用 是 SUM(FEES + HCOST) 其中 lperiod = '1115'
- 应付金额 是 Prev.Bal - 付款 + 当前费用
这是否可能在使用子查询的一个查询下,或者甚至可能使用一对临时 tables?
用例
你可以建立更高级的逻辑
对于应付金额,我会嵌套查询
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
我的会计数据库中的分类帐 table 有以下查询:
select lmatter
, ltradat
, llcode
, lamount
, lperiod
from ledger
where lmatter = '1234-ABCD'
and lzero <> 'R'
order by lperiod
结果是:
据此,我想知道是否可以创建最终结果:
我得到这些#的方式如下:
我们假设今天是 2015 年 12 月 1 日,我们正在为 2015 年 11 月的数据计费。这使得我们正在使用的 lperiod 作为 "current" 等于 '1115'
- 案件 ID 是一个不同的 l 案件
- 上一条Bal 是 SUM(FEES + HCOST) - SUM(PAY) 其中 lperiod <> '1115'
- Payments 是 SUM(PAY) 其中 lperiod = '1115'
- 当前费用 是 SUM(FEES + HCOST) 其中 lperiod = '1115'
- 应付金额 是 Prev.Bal - 付款 + 当前费用
这是否可能在使用子查询的一个查询下,或者甚至可能使用一对临时 tables?
用例
你可以建立更高级的逻辑
对于应付金额,我会嵌套查询
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