日期:2014-05-18 浏览次数:20607 次
--有张表#tb_yskm,这张表就是财政功能科目表
fzdm fzmc
201 mc1
20101 mc2
2010101 mc3
202
..............
#tb_zb,指标情况表,yskmdm就是FZDM,但是此表yskmdm都是明细项。
yskmdm je1 je2 je3
2010101 500.00 120.00 0.00
..................................
#tb_jh,指标情况表,yskmdm就是FZDM,但是此表yskmdm都是明细项。
yskmdm j1 j2 j3
2010101 400.00 20.00 0.00
..................................
--需求:得到含所有FZDM的指标、计划情况表#tb_zb_jh,并且按照FZDM分级汇总
#tb_zb_jh
fzdm je1 je2 je3 j1 j2 j3
201 500.00 120.00 0.00 400.00 20.00 0.00
20101 500.00 120.00 0.00 400.00 20.00 0.00
2010101 500.00 120.00 0.00 400.00 20.00 0.00
........................
--我是这样是写的SQL,但是分级汇总的数据不对啊,求教!
SELECT A.FZDM,
je1=ISNULL(SUM(B.je1),0),
je2=ISNULL(SUM(B.je2),0),
je3=ISNULL(SUM(B.je3),0),
j1=ISNULL(SUM(C.j1),0),
j2=ISNULL(SUM(C.j2),0),
j3=ISNULL(SUM(C.j3),0)
FROM #tb_yskm as A
LEFT JOIN #tb_zb as B
ON B.YSKMDM like A.FZDM+'%'
LEFT JOIN #tb_jh as C
ON C.YSKMDM like A.FZDM+'%'
GROUP BY A.FZDM
)t
select t1.FZDM,t1.je1,t1.je2,t1.je3,t2.j1,t2.j2,t2.j3 from( SELECT A.FZDM, je1=ISNULL(SUM(B.je1),0), je2=ISNULL(SUM(B.je2),0), je3=ISNULL(SUM(B.je3),0), FROM #tb_yskm as A LEFT JOIN #tb_zb as B ON B.YSKMDM like A.FZDM+'%' GROUP BY A.FZDM )t1 inner join( SELECT A.FZDM, j1=ISNULL(SUM(C.j1),0), j2=ISNULL(SUM(C.j2),0), j3=ISNULL(SUM(C.j3),0) FROM #tb_yskm as A LEFT JOIN #tb_jh as C ON C.YSKMDM like A.FZDM+'%' GROUP BY A.FZDM )t2 on t1.FZDM=t2.FZDM
------解决方案--------------------
SELECT A.FZDM,
je1=ISNULL((select SUM(B.je1) from #tb_zb as B where a.yskmdm = b.yskmdm),0)
FROM #tb_yskm as A
子查询即可,其它几项类推,呵呵,科目编码怎么是三位呀。