当前位置: 代码迷 >> Oracle开发 >> 求实现这样一个功能——简历:该如何解决
  详细解决方案

求实现这样一个功能——简历:该如何解决

热度:70   发布时间:2016-04-24 07:28:51.0
求实现这样一个功能——简历:
有这样一张表t,字段为 name,ny,danwei,意思大家应该能明白吧?
每月一条数据,我想实现这样一个结果:

张三 200001——200210 一队
张三 200307——200506 二队
张三 200507——200703 一队
张三 200704——200802 三队
......

其实就是类似个人工作简历,请问如何实现啊?当然,可以指定name='张三'

------解决方案--------------------
如果表中所用数据并非按顺序进行排列的话,请使用一下代码:

SQL code
select name,       to_char(min(ny), 'yyyymm') || '--' || to_char(max(ny), 'yyyymm'),       danwei  from (select name, ny, to_char(ny, 'yyyymm') - rownum rn, danwei from t order by name,danwei,ny) where name = '张三' group by rn, name, danwei order by 2;
------解决方案--------------------
SQL code
WITH t AS(  SELECT '张三' name, to_date('200001','YYYYMM') ny,'一队' danwei FROM dual UNION ALL  SELECT '张三' name, to_date('200201','YYYYMM') ny,'一队' danwei FROM dual UNION ALL  SELECT '张三' name, to_date('200202','YYYYMM') ny,'二队' danwei FROM dual UNION ALL  SELECT '张三' name, to_date('200301','YYYYMM') ny,'二队' danwei FROM dual UNION ALL  SELECT '张三' name, to_date('200302','YYYYMM') ny,'三队' danwei FROM dual UNION ALL  SELECT '李四' name, to_date('200001','YYYYMM') ny,'一队' danwei FROM dual     )select a.name,       to_char(a.ny,'YYYYMM') || '--' || to_char(b.ny,'YYYYMM') ny,       a.danwei  from        (select name, min(ny) ny, danwei from t GROUP BY NAME,danwei) a      LEFT JOIN            (select name, MAX(ny) ny, danwei from t GROUP BY NAME,danwei) b             ON a.name = b.name AND a.danwei = b.danwei group by a.name ,to_char(a.ny,'YYYYMM') || '--' || to_char(b.ny,'YYYYMM') ,a.danwei order by 1,2,3;
  相关解决方案