首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

SQL 语句

2012-02-10 
求一个SQL 语句在线等!BillExtDetail(收入表)----------------------------————cCusCode|gBusiExtract|cIn

求一个SQL 语句 在线等!
BillExtDetail(收入表)
----------------------------————
    cCusCode   |   gBusiExtract   |   cInvDep|      
---------------------------—————
001                         1000                     部门1
--------------------------------------
001                         200                       部门2
-------------------------------------
001                         300                   部门1
------------------------------------
                   


PayOutItem(支出表)
----------------------------——
    cCusCode   |   outFee   |   cInvDep|  
---------------------------——
001                       800             部门1            
-------------------------------
001                     300               部门3


要求结果:要求结果:要求结果:要求结果:要求结果:要求结果:要求结果:
阐述   1、如果这个部门有收入那么从收入表中汇总并减   得出   剩余总额
        2、如果这个部门没有收入数据,那么从汇总显示     得出负数
特别是没有收入数据的
没有收入数据没有收入数据的
部门名称         收入总额           支出总额             剩余总额    
————————————————————————————————
部门1                 1300                     800                       500
————————————————————————————————
部门2                 200                       0                             200
----------------------------
部门3                 0                           300                     -300
----------------------------


[解决办法]
select
部门名称=a.cInvDep,
收入总额=isnull(b.gBusiExtract,0),
支出总额=isnull(c.outFee,0),
剩余总额=isnull(b.gBusiExtract,0)-isnull(c.outFee,0)
from
(select distinct cInvDep from BillExtDetail
union
select distinct cInvDep from PayOutItem) a
left join
(select cInvDep,sum(gBusiExtract) as gBusiExtract from BillExtDetail group by cInvDep) b
on
a.cInvDep=b.cInvDep
left join
(select cInvDep,sum(outFee) as outFee from PayOutItem group by cInvDep) c
on
a.cInvDep=c.cInvDep
order by
a.cInvDep
[解决办法]
create table 收入表( cCusCode varchar(5), gBusiExtract int, cInvDep varchar(5))
insert 收入表 select '001 ', 1000, '部门1 '
union all select '001 ', 200, '部门2 '


union all select '001 ', 300, '部门1 '



create table 支出表(cCusCode varchar(5), outFee int, cInvDep varchar(5))
insert 支出表 select '001 ', 800, '部门1 '
union all select '001 ', 300, '部门3 '


select *,(收入总额-支出总额)剩余总额 from
(select isnull(a.cInvDep,b.cInvDep)部门名称,
isnull(a.gBusiExtract,0)收入总额,
isnull(b.outFee*,0)支出总额
from (select sum(gBusiExtract)gBusiExtract,cInvDep from 收入表 group by cInvDep)a
full join 支出表 b on a.cInvDep=b.cInvDep)a

[解决办法]

declare @BillExtDetail table(cCusCode char(3),gBusiExtract int,cInvDep varchar(5))
insert @BillExtDetail
select '001 ',1000, '部门1 '
union all
select '001 ',200, '部门2 '
union all
select '001 ',300, '部门1 '


declare @PayOutItem table(cCusCode char(3),outFee int,cInvDep varchar(5))
insert @PayOutItem
select '001 ',800, '部门1 '
union all select '001 ',300, '部门3 '

select [部门名称]=isnull(a.cInvDep,b.cInvDep),
[收入]=isnull((select sum(isnull(gBusiExtract,0)) from @BillExtDetail where cInvDep=a.cInvDep),0),
[支出]=isnull((select sum(isnull(outFee,0)) from @PayOutItem where cInvDep=b.cInvDep),0),
[剩余总额]=isnull((select sum(isnull(gBusiExtract,0)) from @BillExtDetail where cInvDep=a.cInvDep),0)-
isnull((select sum(isnull(outFee,0)) from @PayOutItem where cInvDep=b.cInvDep),0)
from @BillExtDetail a full join @PayOutItem b on a.cInvDep=b.cInvDep
group by a.cInvDep,b.cInvDep order by 部门名称 asc

(3 行受影响)

(2 行受影响)
部门名称 收入 支出 剩余总额
----- ----------- ----------- -----------
部门1 1300 800 500
部门2 200 0 200
部门3 0 300 -300

(3 行受影响)

热点排行