关于考勤系统系统的,表结构如下:
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如何写才最优化?
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如何写才最优化?
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
/
我上面是的笨办法,看有没有大人有好的方法,或者是写成函数,小弟在此抛砖。