感谢昨天论坛朋友帮忙,经昨晚修改,已能实现!!!
/*感谢 晴天、小F、中国风、大乌龟 [img=http://hi.csdn.net/attachment/201108/17/4981413_1313567397Jdb8.gif][/img]谢谢你们给的思路,我不是搞数据库的,我是做软件实施的,之前可能接触的比较少,因为我们实施一直提倡尽量不写SQL、存储过程来实现。*/
Select a.KJND, a.GSDM, a.YSDWDM, a.M1, L1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), a.M2, L2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), a.M3, L3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end)from (Select KJND, GSDM, GSMC, YSDWDM, M1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), M2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), M3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end) from ZB_MXZB AS a WHERE (ZBZT<>'2') and (substring(sh_rq,1,6)='201109') and (shr_id<>-1) and (ysdwdm like '117%') GROUP BY KJND,GSDM,GSMC,YSDWDM)a,zb_mxzb as bWHERE a.KJND=b.KJND AND a.GSDM=b.GSDM AND a.YSDWDM=b.YSDWDM and b.sh_rq<=20110930GROUP BY a.KJND,a.GSDM,a.GSMC,a.YSDWDM,a.M1,a.M2,a.M3
[解决办法]
求合计:
select *,M1+L1+M2+L2 as 合计 from(Select a.KJND, a.GSDM, a.YSDWDM, a.M1, L1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), a.M2, L2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), a.M3, L3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end)from (Select KJND, GSDM, GSMC, YSDWDM, M1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), M2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), M3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end) from ZB_MXZB AS a WHERE (ZBZT<>'2') and (substring(sh_rq,1,6)='201109') and (shr_id<>-1) and (ysdwdm like '117%') GROUP BY KJND,GSDM,GSMC,YSDWDM)a,zb_mxzb as bWHERE a.KJND=b.KJND AND a.GSDM=b.GSDM AND a.YSDWDM=b.YSDWDM and b.sh_rq<=20110930GROUP BY a.KJND,a.GSDM,a.GSMC,a.YSDWDM,a.M1,a.M2,a.M3)T
[解决办法]
"1.我想在另张表pubgszl里提取单位名称进去,老是有错- -"
Please try below.
Select a.KJND, a.GSDM, a.YSDWDM, c.gsmc a.M1, L1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), a.M2, L2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), a.M3, L3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end)from (Select KJND, GSDM, YSDWDM, M1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), M2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), M3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end)from ZB_MXZB AS aWHERE (ZBZT<>'2') and (substring(sh_rq,1,6)='201109') and (shr_id<>-1) and (ysdwdm like '117%') GROUP BY KJND,GSDM,YSDWDM) a,zb_mxzb as b,pubgszl as cWHERE a.KJND=b.KJND AND a.GSDM=b.GSDM AND a.YSDWDM=b.YSDWDM and b.sh_rq<=20110930 and b.ysdwdm=c.gsdmGROUP BY a.KJND,a.GSDM,a.YSDWDM,a.M1,a.M2,a.M3
[解决办法]
对了,还少写一个列名:
Select a.KJND, a.GSDM, a.GSMC a.YSDWDM, a.M1, L1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), a.M2, L2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), a.M3, L3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end)from (Select KJND, GSDM, GSMC, YSDWDM, M1=SUM(CASE WHEN (ZBLYDM like '0601%'or ZBLYDM like '0501%' or ZBLYDM like '0401%') THEN JE ELSE 0 END), M2=SUM(CASE WHEN (ZBLYDM like '0601%') THEN JE ELSE 0 end), M3=SUM(CASE WHEN (ZBLYDM like '0401%'or ZBLYDM like '0501%') THEN JE ELSE 0 end) from ZB_MXZB AS a WHERE (ZBZT<>'2') and (substring(sh_rq,1,6)='201109') and (shr_id<>-1) and (ysdwdm like '117%') GROUP BY KJND,GSDM,GSMC,YSDWDM)a,zb_mxzb as bWHERE a.KJND=b.KJND AND a.GSDM=b.GSDM AND a.YSDWDM=b.YSDWDM and b.sh_rq<=20110930GROUP BY a.KJND,a.GSDM,a.GSMC,a.YSDWDM,a.M1,a.M2,a.M3
[解决办法]
上面的大佬们都写出来了 我就围观一下算了
[解决办法]
生成CTE可直接用 group by +rollup