select sum(b.budget) as Budget,sum(b.rev) as Revised,sum(b.expe) as Expenditure,(sum(b.budget) + sum(b.rev) - sum(b.expe)) as balance,
b.accounts,b.abac_code,
b.abac_name,b.dac_code,b.dac_name,b.abacname
from
(
select upper('Budget') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname
,0 Accounts,nvl(sum(nvl(g3.amt,0)),0) as budget,0 rev,0 expe
from abac a,dac d,acct_master ac,gl3 g3
where g3.acct_sl=ac.sl and a.sl=ac.afld_sl4 and d.sl =afld_sl5 and upper(g3.typ) = upper('budget')
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl )
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
and g3.drange_sl = :drange_sl
group by a.sl,a.code ,a.name ,d.code,d.name
union all
select upper('Revised') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname,
0 Accounts,0 budget,nvl(sum(nvl(rev_amt,0)),0) as rev,0 expe
from abac a,dac d,acct_master ac,gl3 g3
where g3.acct_sl=ac.sl and a.sl=ac.afld_sl4 and d.sl =afld_sl5 and upper(g3.typ) = upper('budget')
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl )
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
and g3.drange_sl =:drange_sl
group by a.sl,a.code ,a.name ,d.code,d.name
union all
select upper('Expenditure') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname,
0 Accounts,0 budget,0 rev,nvl(sum(nvl((abs(g.amt)),0)),0) expe
from gl g,chq c,acct_master ac,abac a ,dac d
where upper(typ) = upper('pay2') and g.vouchr_no>0 and g.amt>0 and g.acct_sl =ac.sl and ac.afld_sl4 =a.sl and ac.afld_sl5 =d.sl
and g.chq_sl=c.sl and g.drange_sl =:drange_sl and c.doc_date between :from_date and :to_date
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl)
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
group by a.sl,a.code ,a.name ,d.code,d.name
order by dac_code
) b
group by b.abac_code,b.abac_name,b.dac_code,b.dac_name,b.abacname,b.accounts
order by balance
答案 0 :(得分:0)
如果要引用余额,则必须再次将其包含在子查询中
select *
from (
select sum(b.budget) as Budget,
sum(b.rev) as Revised,
sum(b.expe) as Expenditure,
(sum(b.budget) + sum(b.rev) - sum(b.expe)) as balance,
b.accounts, b.abac_code, b.abac_name, b.dac_code, b.dac_name, b.abacname
from
(
select upper('Budget') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname
,0 Accounts,nvl(sum(nvl(g3.amt,0)),0) as budget,0 rev,0 expe
from abac a,dac d,acct_master ac,gl3 g3
where g3.acct_sl=ac.sl and a.sl=ac.afld_sl4 and d.sl =afld_sl5 and upper(g3.typ) = upper('budget')
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl )
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
and g3.drange_sl = :drange_sl
group by a.sl,a.code ,a.name ,d.code,d.name
union all
select upper('Revised') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname,
0 Accounts,0 budget,nvl(sum(nvl(rev_amt,0)),0) as rev,0 expe
from abac a,dac d,acct_master ac,gl3 g3
where g3.acct_sl=ac.sl and a.sl=ac.afld_sl4 and d.sl =afld_sl5 and upper(g3.typ) = upper('budget')
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl )
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
and g3.drange_sl =:drange_sl
group by a.sl,a.code ,a.name ,d.code,d.name
union all
select upper('Expenditure') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname,
0 Accounts,0 budget,0 rev,nvl(sum(nvl((abs(g.amt)),0)),0) expe
from gl g,chq c,acct_master ac,abac a ,dac d
where upper(typ) = upper('pay2') and g.vouchr_no>0 and g.amt>0 and g.acct_sl =ac.sl and ac.afld_sl4 =a.sl and ac.afld_sl5 =d.sl
and g.chq_sl=c.sl and g.drange_sl =:drange_sl and c.doc_date between :from_date and :to_date
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl)
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
group by a.sl,a.code ,a.name ,d.code,d.name
order by dac_code
) b
group by b.abac_code,b.abac_name,b.dac_code,b.dac_name,b.abacname,b.accounts
) a
where balance < 0
order by balance
我没有尝试过,但您也可以使用HAVING
子句
select sum(b.budget) as Budget,
sum(b.rev) as Revised,
sum(b.expe) as Expenditure,
(sum(b.budget) + sum(b.rev) - sum(b.expe)) as balance,
b.accounts, b.abac_code, b.abac_name, b.dac_code, b.dac_name, b.abacname
from
(
select upper('Budget') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname
,0 Accounts,nvl(sum(nvl(g3.amt,0)),0) as budget,0 rev,0 expe
from abac a,dac d,acct_master ac,gl3 g3
where g3.acct_sl=ac.sl and a.sl=ac.afld_sl4 and d.sl =afld_sl5 and upper(g3.typ) = upper('budget')
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl )
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
and g3.drange_sl = :drange_sl
group by a.sl,a.code ,a.name ,d.code,d.name
union all
select upper('Revised') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname,
0 Accounts,0 budget,nvl(sum(nvl(rev_amt,0)),0) as rev,0 expe
from abac a,dac d,acct_master ac,gl3 g3
where g3.acct_sl=ac.sl and a.sl=ac.afld_sl4 and d.sl =afld_sl5 and upper(g3.typ) = upper('budget')
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl )
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
and g3.drange_sl =:drange_sl
group by a.sl,a.code ,a.name ,d.code,d.name
union all
select upper('Expenditure') typ,a.sl abac_sl,a.code abac_code,a.name abac_name,d.code dac_code,d.name dac_name,a.code || ' - ' || a.name abacname,
0 Accounts,0 budget,0 rev,nvl(sum(nvl((abs(g.amt)),0)),0) expe
from gl g,chq c,acct_master ac,abac a ,dac d
where upper(typ) = upper('pay2') and g.vouchr_no>0 and g.amt>0 and g.acct_sl =ac.sl and ac.afld_sl4 =a.sl and ac.afld_sl5 =d.sl
and g.chq_sl=c.sl and g.drange_sl =:drange_sl and c.doc_date between :from_date and :to_date
and d.sl in (select sl from selall where upper(table_name) = upper('dac') and user_sl = :user_sl)
and a.sl in (select sl from selall where upper(table_name) = upper('abac3') and upper(typ) = upper('pabac') and user_sl = :user_sl )
group by a.sl,a.code ,a.name ,d.code,d.name
order by dac_code
) b
group by b.abac_code,b.abac_name,b.dac_code,b.dac_name,b.abacname,b.accounts
having (sum(b.budget) + sum(b.rev) - sum(b.expe)) < 0
order by balance