求实现这样一个功能——简历:该如何解决
求实现这样一个功能——简历:
有这样一张表t,字段为 name,ny,danwei,意思大家应该能明白吧?
每月一条数据,我想实现这样一个结果:
张三 200001——200210 一队
张三 200307——200506 二队
张三 200507——200703 一队
张三 200704——200802 三队
......
其实就是类似个人工作简历,请问如何实现啊?当然,可以指定name='张三'
------解决方案--------------------
如果表中所用数据并非按顺序进行排列的话,请使用一下代码:
有这样一张表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;