`
还有也许
  • 浏览: 164367 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

一个SQL,几点启发

    博客分类:
  • SQL
阅读更多
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 .

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics