ibatis 动态列缓存问题;oracle行转列;oracle使用数字或特殊字符作列的别名

1、iBatis会自动缓存每条查询语句的列名映射,所有如果你动态生成列名的话就有可能造成查询列名无效的问题。

ibaits 会缓存查询的meta信息,在生成动态列时一定要加上 remapResults="true"。

2、oracle查询sql中,想使用数字或特殊字符作列的别名时,可以用“”引起来。

3、oracle行转列,事先需要确定查询的列信息,在列用sum和decode函数汇总

如:



<select id="queryZjhHzByRq" parameterClass="com.athena.paicjh.entity.paiczjhjs.Paiczjhjs" resultClass="java.util.HashMap" remapResults="true">
		select zcwlh || '(' || sum(sl) || ')' zcwlh
			<iterate property="beanList"> 
				,sum(decode(rksj, #beanList[].rksj#, sl, 0)) "$beanList[].rksj$"
		 	</iterate>
		  from (select to_char(jz.rksj, 'yyyy-mm-dd') rksj,
		               jz.zcwlh,
		               sum(nvl(jz.sl, 0)) sl,
		               jz.ptbz
		          from jh_zjh jz
		         where jz.usercenter = #usercenter#
		           and jz.rksj >= to_date(#start#, 'yyyy-mm-dd')
		           and jz.rksj <![CDATA[<=]]> to_date(#end#, 'yyyy-mm-dd')
		           <isNotEmpty prepend="and" property="zcwlh">
						zcwlh like $zcwlh$
					</isNotEmpty>
		         group by jz.rksj, jz.zcwlh, jz.ptbz
		        union all
		        select to_char(to_date(rksj, 'yyyymm'), 'yyyy-mm') rksj,
		               zcwlh,
		               sum(nvl(sl, 0)) sl,
		               '2' ptbz
		          from jh_yzjh
		         where usercenter = #usercenter#
		           and drbz = '0'
		           and to_date(rksj || '01', 'yyyymmdd') >= to_date(#start#, 'yyyy-mm-dd')
		           and to_date(rksj || '01', 'yyyymmdd') <![CDATA[<=]]> to_date(#end#, 'yyyy-mm-dd')
		           <isNotEmpty prepend="and" property="zcwlh">
						zcwlh like $zcwlh$
					</isNotEmpty>
		         group by rksj, zcwlh) t
		 group by zcwlh
		 order by zcwlh
	</select>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值