中易网

oracle转码后再转回去,求教

答案:1  悬赏:0  
解决时间 2021-01-25 05:13
oracle转码后再转回去,求教
最佳答案
当我们面对一个数据表,且表结构为:
  create table R_ExtSubFina_Month(rptdate date not null,rptname varchar2(10) not null,rptNum varchar2(10) not null,SaleMoney number(18,3),proMoney number(18,3),,Status varchar2(2) );
  现在表中已经存在的数据如下(PS:这里的报送编码需要从别的表中获取):
  但是我们需要从当前表中统计出今年的本月,去年的本月和今年上个月的销售额和定金的数据,那么我们的sql语句应该怎么写??
  方案一:union
  我们都知道union是对表格进行联合查询的,当我们需要对两个表的数据进行查询我们可以使用,但是要遵守:
  1.要求我们获取两个表的字段个数和字段数据类型是要完全一致的;2.如果数据类型一致,但是个数不一致,我们可以对某个表中设计空字段,比如需要查询A表中的两个字段,需要B表中的1个字段,那么我们就要将语句这样写:
  select * from A
  union
  select a, ' ' from B
  此处的 ‘ ’ 就保证了A 和B表的字段数量一致;但是我们的sql语句不单单是为了查询结果,对结果进行显示和分析,更重要的是性能;所以union不能入围我们的选择方案(具体原因稍后在方案2中讲解)方案二:union all
  使用union 需要将两个表的字段数量和字段的数据类型都一致,为了避免这种问题,我们使用union all,这样我们可以直接将上面的语句修改为:
  select * from A union all(select * from B);虽然可以解决这个查询的问题,但是显示的结果中需要三个不同日期的结果,而这三个日期需要我们手动进行加减计算,然后再同一个表的同一个字段中取不同的值,那么问题来了,当我们使用union all 我们需要以每一个日期作为条件对表进行查询,这样就对表进行了至少三次的扫描,所以我们需要担心这样的语句带来的性能问题;那么相比方案一我们有没有一些进步呢?答案是有的;Union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;Union All:对两个结果集进行并集操作,包括重复行,不进行排序;Union因为要进行重复值扫描,所以效率低。如果合并没有刻意要删除重复行,那么就使用Union All方案三:decode转码求和
  原理:我们将每一个日期作为条件一次性将所有的数据都查询出来,这样我们会查询出来三条数据,详细如下:
  我们可以发现红色框内的数据有为0的数据,这样我们想要的数据已经呈现出来,但是我们如何把三条数据合成一条(不含0)呢??
  思路: 行专列-->decode-->求和
  我们将上面的数据看成一个矩阵,矩阵行专列之后结果是不变的,所以上图中的数据就会变成下图中的数据:
  这样我们可以对每一列求和,然后和刚才的三个日期进行合并,这样三条数据就会被我们合成一条;实现代码如下:
  PS:参数设置:l_year :当前的年月 ; l_curLastMonth :今年的上个月; l_lastYear :去年的这个月select l_year year, l_curLastMonth lmon,l_lastYear lymon, decode(A.rptdate,l_year,A.saleMoney ,0) AS , decode(A.rptdate, l_curLastMonth,A.saleMoney ,0) ASS, decode(A.rptdate,l_lastYear,A.saleMoney ,0) ASSS from A
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
玫瑰园鲜花地址在什么地方,我要处理点事
2013年上海公积金贷款额度如何计算
我在大连拍的艺术照花了1500,有18寸的水晶相
大话,芜湖有哪些茶餐厅的调调适合情侣去的?
丰胸一般多少钱?四川成都​
酒店管理系统老是进不去是什么原因呢
智能家居前景怎样呢?
峡江东升宾馆地址在什么地方,我要处理点事
做了蛋白线脸部提升后是卧床好还是做起来好
蔡林舞蹈艺术学院(德艺分校)地址在什么地方,
大师,日坐长生是什么意思?
高圆圆和老公的结婚有哪些人参加
北京桃源仙谷刘大姐农家院地址在哪,我要去那
空气开关、漏电断路器、过压欠压保护器,分不
房梁碳纤维加固怎么收费
推荐资讯
华伦超市地址在什么地方,想过去办事
“多亏有你的帮助,这个学期我的英语提高了很
怎么用光电传感器测电动机转速
请问到哪能查到有没企业注册信息?
求五个疯疯癫癫二傻子陪我一起过 有没有,=
为什么水果磕了、碰了或受到挤压是更易腐败?
我好想健康减肥啊,您有什么好的办法吗?穴位
牛油是怎么提炼的
linux 下查看电量用apm,显示为no apm support
请问哪位高手知道铁和铝的电导率各是多少?
阳历16年9月份的黄道吉日
百立丰t708手机怎么解锁以后出现生产模式
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?