oracle解决按号单排序和横向记录拼字段问题
oracle数据库如何解决按号单排序和横向记录拼字段问题呢?本文举例说明这个问题,以下是案例遇到的问题及其解决方案:
问题1.客户提供了一个号单,如:'A001','B002','X008','D003'这个号单的顺序是有人为业务含义的。要求查询出这些号单的详细信息,并且查询出来的结果要按号单的提供顺序排序。
解决:其实查询出来很简单,如:select*from table_a where formCode in('A001','B002','X008','D003');
关键是要按号单的顺序进行排序,实现方式可以参考oracle的函数,使用instr函数。
实现结果:
select*from table_a where fromCode in('A001','B002','X008','D003')order by instr('A001,B002,X008,D003',formCode);
当然还有其他很多方法实现,比如数据库建一张临时表,把号单插入,并插入序号列,使用表关联实现排序。还有其他高人的一些方法,但我想使用instr函数应该是最简单一种行之有效的方法了。
问题2.表记录的列组合
例如:表a班级人员,表b学生成绩,
表a
班级编号班级学号姓名
C001一年1班001张三
C001一年1班002李四
表b
学号姓名科目成绩
001,张三,语文,80
001,张三,数学,90
要求实现一个查询,查询一个班级所有的学生成绩,要求的列是:班级编号班级学号姓名语文成绩数学成绩
实现:考虑到这时一个把表记录按类型提取到查询列上的要求,需要用多次表关联来实现。
实现结果:
select a.班级编号,a.班级,a.学号,a.姓名,b1.成绩,b2.成绩
om a left join(select学号,成绩from b where课程=‘语文’)b1on a.学号=b1.学号left join select学号,成绩from b where课程=‘数学’)b2on a.学号=b2.学号