select x.swjg_dm as ZSJG_DM,
x.MC as SWJG_MC,
x.JGJC,
sum(nvl(y.YDZCX, 0)) as GKBBS,
sum(nvl(y.YDZCX, 0)) as YDZCS,
sum(nvl(y.DZCGCS, 0)) as DZCGCS,
sum(nvl(y.DZBCGCS, 0)) as DZBCGCS
from T_DM_GY_SWJG x,
(select T.SWJG_DM, T.MC, count(1) as YDZCX, 0 as DZCGCS, 0 as DZBCGCS
from T_QS_XZBBXX x, T_DM_GY_SWJG T
where T.SWBM_BJ = '0'
and T.SJSWJG_DM=(CASE WHEN ? IS NULL THEN '23200000000' ELSE ? END)
and x.zsjg_dm like T.cc || '%'
group by T.SWJG_DM, T.MC
union all
select T.SWJG_DM, T.MC, 0, count(1), 0
from T_QS_DZXX_RQ RZ, T_DM_GY_SWJG T
where RZ.DZZT_DM = '01'
AND RZ.DZLX_DM = '01'
and T.SWBM_BJ = '0'
and T.SJSWJG_DM=(CASE WHEN ? IS NULL THEN '23200000000' ELSE ? END)
and RZ.zsjg_dm like T.cc || '%'
group by T.SWJG_DM, T.MC
union all
select T.SWJG_DM, T.MC, 0, 0, count(1)
from T_QS_DZXX_RQ RZ, T_DM_GY_SWJG T
where RZ.DZZT_DM <> '01'
AND RZ.DZLX_DM = '01'
and T.SWBM_BJ = '0'
and T.SJSWJG_DM=(CASE WHEN ? IS NULL THEN '23200000000' ELSE ? END)
and RZ.zsjg_dm like T.cc || '%'
group by T.SWJG_DM, T.MC) y
where x.swjg_dm = y.swjg_dm(+)
and x.SJSWJG_DM=(CASE WHEN ? IS NULL THEN '23200000000' ELSE ? END)
and x.SWBM_BJ = '0'
group by x.swjg_dm, x.mc,x.jgjc
该SQL 是要展示如图所示的效果
税务机关 国库报表数 应对账次数 对账成功次数 对账不成功次数
1、将一个SQL的结果当做一个表,起个别名和另一个表关联
2、为了取得数量的和,创建一些空的类,起个别名,然后sum.
3、nvl 函数 NVL( string1, replace_with)
功能:如果string1为NULL,则NVL函数返回replace_with的值,否则返回string1的值。
4、case when zhen 语句
5、like 的运用
很值得学习
还有一个带点技巧性
select t.zsjg_dm,to_char(t.bbssrq,'yyyy-MM-dd') bbssrq,
to_char(t.xzdate,'yyyy-MM-dd') xzdate,t.czry_dm,
( case
when rz.dzlx_dm is null
then '未对帐'
when rz.dzzt_dm ='01'
then '对帐成功'
when rz.dzzt_dm='02'
then '对帐不成功'
end ) DZJG
from T_QS_XZBBXX t, T_QS_DZXX_RQ rz
where t.zsjg_dm=rz.zsjg_dm(+)
and t.bblx=rz.bblx(+)
如果T_QS_XZBBXX 没有存在于 T_QS_DZXX_RQ的对应数据状态为“未对帐”,可以用左连接的空值来判断,而不是not exists .