1查询显示出单位名称里面第三、四个字有“工商”字的单位编号和单位名称
2查询显示出所有单位已参保险种和最大做账期号,横向展示,一个单位一条记录
3统计出所有单位单位编号、已参加险种个数和未参加险种个数(不包含参保状态为'3'的,和注销标志为'1'的)
4删除险种类型的注销标志= '1' 的单位该险种的参保信息
5修改单位编号长度不等于6的单位编号为原单位编号的前六位,不足的右边用0补足
6查询出单位编码为100002的单位参与核定和缴费200812期缴费的人员姓名
7查询出单位编码为100002的单位参与核定和缴费200812期缴费的现在在该单位的人员姓名
ab01
名称 类型 是否为空 注释
aab001 varchar2(15) 单位编号
aab004 varchar2(120) 单位名称
aae119 varchar2(6) y 单位状态
yae496 varchar2(10) y 所属街道
yae407 varchar2(10) y 所属社区
aab001 aab004 aae119 yae496 yae407
100001 工商银行1 1 1001 100101
100002 建设银行1 1 1001 100101
100007 adfd 1 1002 100201
100003 ab工商银行2 1 1001 100101
100004 成都工商银行3 1 1001 100103
1000055 建设银行2 1 1002 100201
10002 adadsddd 1 1002 100201
100006 建设银行3 2 1002 100201ab02
名称 类型 是否为空 注释
aab001 varchar2(15) 单位编号
aae140 varchar2(6) 险种类型
aab051 varchar2(6) y 参保状态
yae097 number(6) y 最大做账期号
aab001 aae140 aab051 yae097
100001 04 1
100001 02 1
100001 05 1
100001 01 1 200601
100001 03 1 200801
100001 11 3 200601
100007 03 1
1000055 01 1 200801
1000055 02 1 200801
100002 01 1 200812bm_aae140
名称 类型 是否为空 注释
aae140 varchar2(6) 险种类型
aae120 varchar2(6) y 注销标志:1注销
aaa103 varchar2(200) 代码名称
aae140 aae120 aaa103
01 0 基本养老保险
02 0 失业保险
03 0 基本医疗保险
04 0 工伤保险
05 0 生育保险
11 1 居民医疗保险 ac01
名称 类型 是否为空 注释
aac001 varchar2(15) 个人编号
aac003 varchar2(60) y 姓名
aac001 aac003
10000001 张一
10000002 李四
10000003 王五
10000004 赵三
10000005 孙二

ac02
名称 类型 是否为空 注释
aac001 varchar2(15) 个人编号
aab001 varchar2(15) 单位编号
aae140 varchar2(6) 险种类型
aac031 varchar2(6) y 个人参保状态
aac001 aab001 aae140 aac031
10000001 100002 01 2
10000002 100002 01 3
10000003 100002 01 1
10000004 100001 01 1
10000005 100002 01 1

说明:aac031:1参保2暂停3终止

ic01养老实缴表
名称 类型 是否为空 注释
aac001 varchar2(15) 个人编号
aab001 varchar2(15) 单位编号
aae002 number(6) 费款期号
aac001 aab001 aae002
10000001 100002 200812
10000001 100002 200811
10000003 100002 200812 ic01i1养老应缴表
名称 类型 是否为空 注释
aac001 varchar2(15) 个人编号
aab001 varchar2(15) 单位编号
aae002 number(6) 费款期号
aac001 aab001 aae002
10000002 100002 200812
10000002 100002 200811

解决方案 »

  1.   

    1查询显示出单位名称里面第三、四个字有“工商”字的单位编号和单位名称 
    select aab001,aab004 from ab01 where instr(aab004,'工商')=3看的累,不看了:(
      

  2.   

    这只是按我个人理解写的,有些实在太专业了,看不太懂,而且现在没有环境,可能有些细节需要修改
    总之,lz仅做个参考吧
    --2查询显示出所有单位已参保险种和最大做账期号,横向展示,一个单位一条记录
    select aab001 单位编号,
    max(case aae140 when 01 then yae097) 基本养老保险,
    max(case aae140 when 02 then yae097) 失业保险,
    max(case aae140 when 03 then yae097) 基本医疗保险,
    max(case aae140 when 04 then yae097) 工伤保险,
    max(case aae140 when 05 then yae097) 生育保险,
    max(case aae140 when 11 then yae097) 居民医疗保险
    from ab02 group by aab001;--3统计出所有单位单位编号、已参加险种个数和未参加险种个数(不包含参保状态为'3'的,和注销标志为'1'的)
    select aab001 单位编号,aa 已参加险种个数,bb-aa 未参加险种个数
    from (select aab001,count(*) aa,(select count(*) from bm_aae140 where aae120<>1) bb 
    from ab02 where aab051<>'3' group by aab001);--4删除险种类型的注销标志= '1' 的单位该险种的参保信息
    delete from ab02 where aae140 in (select aae140 from bm_aae140 where aae120=1);--5修改单位编号长度不等于6的单位编号为原单位编号的前六位,不足的右边用0补足
    update ab01 a set aab001=
    (select (case when length(aab001)>6 then substr(aab001,1,6) when length(aab001)<6 then lpad(aab001,6,'0') else aab001 end) 
    from ab01 b where b.aab001=a.aab001);
    --这个我只更新了一个表。--6查询出单位编码为100002的单位参与核定和缴费200812期缴费的人员姓名
    select aac003 from ac01,ic01 
    where ac01.aac001=ic01.ac001 and aab001='100002' and aae002=200812;--7查询出单位编码为100002的单位参与核定和缴费200812期缴费的现在在该单位的人员姓名 
    select aac003 from ac01,ic01 
    where ac01.aac001=ic01.ac001 and aab001='100002' and aae002=200812 
    and ac01.aac001 in(select aac001 from ac02 where aab001='1000002');