Oracle 行转列小结

主要原理是利用decode函数、聚集函数(sum/max/min/avg),结合group by分组实现的,具体sql如下:

    select t.user_name as 姓名,  
        MAX(decode(t.course,'语文',score,null)) as 语文,  
        MAX(decode(t.course,'数学',score,null)) as 数学,  
        MAX(decode(t.course,'英语',score,null)) as 英语  
    from RowToCol t group by t.user_name  order by t.user_name  

 *当要分组的值,如例子中的score列是数值型,则聚集函数可以使用sum/max/min/avg,但是字符行的只能使用max/min。

 decode函数:

      它是一种特有的函数计算方式,相当于计算机语言中的if...else...

       decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

我介几写的:

StringBuffer sb = new StringBuffer();
		sb.append("select t.group_line_id,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(0).get("RZL_ID").toString()+"',data_content,null)) as rq,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(1).get("RZL_ID").toString()+"',data_content,null)) as hj1,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(2).get("RZL_ID").toString()+"',data_content,null)) as hj2,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(3).get("RZL_ID").toString()+"',data_content,null)) as hx,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(4).get("RZL_ID").toString()+"',data_content,null)) as sb,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(5).get("RZL_ID").toString()+"',data_content,null)) as lh,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(6).get("RZL_ID").toString()+"',data_content,null)) as lx,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(7).get("RZL_ID").toString()+"',data_content,null)) as qccm,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(8).get("RZL_ID").toString()+"',data_content,null)) as qclm,");
		sb.append("max(decode (t.rzl_id,'"+rzlidList.get(9).get("RZL_ID").toString()+"',data_content,null)) as qccr");
		sb.append(" from r5_yxrz_data t");
		sb.append(" where re_id = ? and rz_id = ?");
		sb.append(" group by t.group_line_id");
		sb.append(" order by t.group_line_id");

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值