ichxxt2 2012-08-22 16:27
浏览 666
已采纳

排班查询

值班数据库表有几个字段:
员工ID,日期,上班类型(早,中,晚)

实现一个存储过程,能列出排班表,如:

EID 周一 周二 周三

日期 8-20 8-21 8-22

001 早 中 晚
002 早 早 中

如果数据库字段不方便实现结果可以重新设计。存储过程也不一定要有,只要关键的查询语句就行了。

  • 写回答

2条回答 默认 最新

  • iteye_7115 2012-08-23 10:33
    关注

    模拟数据:

    EMPLOYEE_ID DTIME TYPE
    001 2012-8-20 早
    001 2012-8-21 中
    001 2012-8-22 中
    001 2012-8-23 晚
    001 2012-8-24 早
    002 2012-8-20 中
    002 2012-8-21 早
    002 2012-8-22 早
    002 2012-8-23 晚
    002 2012-8-24 早
    001 2012-8-27 早
    001 2012-8-28 中
    001 2012-8-29 晚

    代码:
    [code="sql"]
    select rn,employee_id,
    max(decode(weekday,'星期一',to_char(dtime,'yyyy-mm-dd')||'('||type||')')) "周一",
    max(decode(weekday,'星期二',to_char(dtime,'yyyy-mm-dd')||'('||type||')')) "周二",
    max(decode(weekday,'星期三',to_char(dtime,'yyyy-mm-dd')||'('||type||')')) "周三",
    max(decode(weekday,'星期四',to_char(dtime,'yyyy-mm-dd')||'('||type||')')) "周四",
    max(decode(weekday,'星期五',to_char(dtime,'yyyy-mm-dd')||'('||type||')')) "周五"
    from (
    select employee_id,
    dtime,
    type,
    weekday,
    rank() over(partition by employee_id, weekday order by dtime) rn
    from (select a.*, to_char(a.dtime, 'day') weekday
    from t a
    order by a.employee_id, dtime)
    )
    group by rn,employee_id
    order by employee_id,rn
    [/code]

    实现效果:

    RN EMPLOYEE_ID 周一 周二 周三 周四 周五
    1 001 2012-08-20(早) 2012-08-21(中) 2012-08-22(中) 2012-08-23(晚) 2012-08-24(早)
    2 001 2012-08-27(早) 2012-08-28(中) 2012-08-29(晚)

    1 002 2012-08-20(中) 2012-08-21(早) 2012-08-22(早) 2012-08-23(晚) 2012-08-24(早)

    这个用oracle的一条sql实现(为了实现跨周,用到的oracle中的分析函数rank() over()),当然在你实际需求中你可以写存储过程,根据我这个思路查出所有数据,然后组织处理下以达到相同效果

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥100 有人会搭建GPT-J-6B框架吗?有偿
  • ¥15 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名