关于考勤系统系统的,表结构如下:
create table HR_ATTENDANCE
(
  ID          NUMBER not null,
  USERID      NUMBER,
  ONDUTYTIME  DATE,
  OFFDUTYTIME DATE,
  MEMO        VARCHAR2(1000)

  ONDUTYTIME   上班时间
  OFFDUTYTIME  下班时间
  MEMO         备注每个员工每天只有一条记录要求得到如下结构
工号     D1上班   D1下班  D1备注  D2上班  D2下班  D2备注 ... D31备注
userid   ond01   offd01 memod01  ond02   offd02 memod02  ... memoD31请问这样的sql如何写才最优化?

解决方案 »

  1.   

    select userid, 
    max(decode(extract(day from ondutytime),'1',ondutytime))"1号上班时间", 
    max(decode(extract(day from ondutytime),'1',ondutytime))"1号上班时间",
    max(decode(extract(day from ondutytime),'1',memo))"备注",
    max(decode(extract(day from ondutytime),'2',ondutytime))"2号上班时间", 
    max(decode(extract(day from ondutytime),'2',ondutytime))"2号上班时间",
    max(decode(extract(day from ondutytime),'2',memo))"备注",.......
    max(decode(extract(day from ondutytime),'31',ondutytime))"31号上班时间", 
    max(decode(extract(day from ondutytime),'31',ondutytime))"31号上班时间",
    max(decode(extract(day from ondutytime),'31',memo))"备注"
    from test
    group by userid
    /
    我上面是的笨办法,看有没有大人有好的方法,或者是写成函数,小弟在此抛砖。