网上查了很多资料都没有找到合适的方法,希望有高手能帮帮忙表字段如下:
ID 员工名称 员工编码 签到日期 签到时间 类型
-------------------------------------------------------------
1 Admin 0001 2013-06-01 09:00 0
2 Admin 0001 2013-06-02 09:10 1
3 xiaoxu 0003 2013-06-01 09:03 1
4 xiaoZh 0002 2013-06-01 09:00 0
.......--------------------------------------------------------------
想要实现结果:员工名称 员工编码 1号 2号 3号 4号 5号 ................31号
Admin 0001 09:00 09:10 null null null................null
xiaoxu 0003 09:03 null null null null................null
xiaoZh 0002 09:00 null null null null................null
...........这个比较急,请大家帮忙
ID 员工名称 员工编码 签到日期 签到时间 类型
-------------------------------------------------------------
1 Admin 0001 2013-06-01 09:00 0
2 Admin 0001 2013-06-02 09:10 1
3 xiaoxu 0003 2013-06-01 09:03 1
4 xiaoZh 0002 2013-06-01 09:00 0
.......--------------------------------------------------------------
想要实现结果:员工名称 员工编码 1号 2号 3号 4号 5号 ................31号
Admin 0001 09:00 09:10 null null null................null
xiaoxu 0003 09:03 null null null null................null
xiaoZh 0002 09:00 null null null null................null
...........这个比较急,请大家帮忙
解决方案 »
- reboot服务器RAC1/2,oracleAsm自动scandisks实效,无磁盘list
- Oracle 未找到FROM预期关键字
- 关于表空间存储的新问题??
- 【问题】归档文件自己消失的问题
- oracle Database Configuration Assistant" 失败
- 哪里有Oracle 11g 的OLE DB驱动下载 ?
- 请朋友们帮忙推荐一下学习oracle的书,需要有高级管理以及存储过程方面的详细章节,谢谢大家!
- 简单问题在线等啊,
- 在ORACLE官方网上下在ORCALE9I为什么不能安装?
- 能不能为一个视图创建快照???
- 来写个sql 玩玩。。
- 关于ORACLE的行列转换的问题
http://bbs.csdn.net/topics/390481097
1.每个员工每天是不是只有一条 签到记录?2.如果某员工里面既有 6月 的也有 7月的 怎么搞?
select t.员工名称,t.员工编码,t.手机号码,
max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 1号,
max(decode(rn, 2, to_char(t.签到时间,'hh24:mi:ss'))) 2号,
max(decode(rn, 3, to_char(t.签到时间,'hh24:mi:ss'))) 3号,
max(decode(rn, 4, to_char(t.签到时间,'hh24:mi:ss'))) 4号,
max(decode(rn, 5, to_char(t.签到时间,'hh24:mi:ss'))) 5号,
max(decode(rn, 6, to_char(t.签到时间,'hh24:mi:ss'))) 6号
from (select t.*,
to_char(t.签到日期,'dd') rn
from t) t
group by t.员工名称,t.员工编码,t.手机号码
//以上语句运行以后可以得到我想要的结果,那么如果我要在日期加个类型(比如:1号 类型 2号 类型) 该怎么实现 max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 1号,
max(decode(rn,1,type)) 类型,
max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 2号,
....
这种 方法不适合 我之前有看过可以直接成一句。请指教
你这个 其实只要把 日期的 天截下来,判断下就可以了select t.empno,
max(decode(t.d, '01', t.kq_time)) "1号",
max(decode(t.d, '02', t.kq_time)) "2号",
max(decode(t.d, '03', t.kq_time)) "3号",
max(decode(t.d, '04', t.kq_time)) "4号",
max(decode(t.d, '05', t.kq_time)) "5号"
from (select t.*, substr(t.kq_date, -2) d from t) t
group by t.empno
你这个 其实只要把 日期的 天截下来,判断下就可以了select t.empno,
max(decode(t.d, '01', t.kq_time)) "1号",
max(decode(t.d, '02', t.kq_time)) "2号",
max(decode(t.d, '03', t.kq_time)) "3号",
max(decode(t.d, '04', t.kq_time)) "4号",
max(decode(t.d, '05', t.kq_time)) "5号"
from (select t.*, substr(t.kq_date, -2) d from t) t
group by t.empno
嗯,现在我想把类型也加上,不知道您有什么好的办法吗?
1.每个员工每天是不是只有一条 签到记录?2.如果某员工里面既有 6月 的也有 7月的 怎么搞?
select t.员工名称,t.员工编码,t.手机号码,
max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 1号,
max(decode(rn, 2, to_char(t.签到时间,'hh24:mi:ss'))) 2号,
max(decode(rn, 3, to_char(t.签到时间,'hh24:mi:ss'))) 3号,
max(decode(rn, 4, to_char(t.签到时间,'hh24:mi:ss'))) 4号,
max(decode(rn, 5, to_char(t.签到时间,'hh24:mi:ss'))) 5号,
max(decode(rn, 6, to_char(t.签到时间,'hh24:mi:ss'))) 6号
from (select t.*,
to_char(t.签到日期,'dd') rn
from t) t
group by t.员工名称,t.员工编码,t.手机号码
//以上语句运行以后可以得到我想要的结果,那么如果我要在日期加个类型(比如:1号 类型 2号 类型) 该怎么实现 max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 1号,
max(decode(rn,1,type)) 类型,
max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 2号,
....
这种 方法不适合 我之前有看过可以直接成一句。请指教这种方法怎么不适合呢?
直接成一句的写法,不会吧。另外,如果不要type,还有一种简单的写法,pivot
with tt as
(select t.empno, t.kq_time, substr(t.kq_date, -2) d from t)
select * from tt pivot(max(kq_time) for d in('01', '02', '03', '04', '05'))
你的表不是有个类型type 是判断是否迟到的吧?那
max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 1号,
max(decode(rn,1,type)) 类型,
max(decode(rn, 1, to_char(t.签到时间,'hh24:mi:ss'))) 2号,我感觉是可以的啊?
case when to_char(t.签到时间,'hh24:mi:ss')>'09:00:00' then '迟到' ELSE '正常上班' end 类型