日期:2014-05-18  浏览次数:20522 次

关于保险数据问题?!!!
请教,关于公积金保险补缴有这样的规定?
对公积金基数和保险比率相同的?数据,将保险基数,单位缴费,个人缴费用合并同一条记录;如保险基数或比率任何一个发生改变,则即使是同一个人,也将做为单独的记录显示出来?

例如
数据结构:
人员编号, 姓名, 保险基数 比率 单位缴费 个人缴费 保险补缴年月

数据如下
001 王小光 6600 0.1 660 660 200704
001 王小光 6600 0.1 660 660 200705
001 王小光 5500 0.1 550 550 200706
001 王小光 5500 0.2 1100 1100 200707
002 肖光 6879 0.1 687.9 687.9 200705


要实现如下结果:
001 王小光 6600 0.1 1320 1320 200704-200705
001 王小光 5500 0.1 550 550 200706
001 王小光 5500 0.2 1100 1100 200707
002 肖光 6879 0.1 687.9 687.9 200705

按照这样的上面的条件,如何得到如上结果?!
太菜了,一直没实现这个功能!
本来想通过建立保险比率以及基数变动表,来记录变动时间,通过时间来判断?无奈用户拒绝这样做?
请各位赐教!!!谢谢



------解决方案--------------------
SQL code
create table #tab (personid varchar(10),name varchar(8),js int,bl numeric(2,1),dw money,gr money ,ym varchar(10))
insert into #tab values('001','王小光',6600,0.1,660,660,'200704')
insert into #tab values('001','王小光',6600,0.1,660,660,'200705')
insert into #tab values('001','王小光',5500,0.1,550,550,'200706')
insert into #tab values('001','王小光',5500,0.2,1100,1100,'200707')
insert into #tab values('002','肖光',6879,0.1,687.9,687.9,'200705')


select #tab.*,flag=0 into #t from #tab order by personid,ym

declare @personid varchar(10),@js int,@bl numeric(2,1),@flag int              
set @flag=0
update #t set 
              @flag=case when @personid=personid and @js=js and @bl=bl then @flag else @flag+1 end,
              @personid=case when @personid=personid and @js=js and @bl=bl then @personid else personid end ,
              @js=case when @personid=personid and @js=js and @bl=bl then @js else js end,
              @bl=case when @personid=personid and @js=js and @bl=bl then @bl else bl end,
              flag=@flag

select 人员编号=max(personid),姓名=max(name),保险基数=max(js),比率=max(bl),单位缴费=sum(dw),个人缴费=sum(gr),保险补缴年月=case when (select count(1) from #t where flag=a.flag)>1 then min(ym)+'-'+max(ym) else max(ym) end from #t a group by flag

drop table #t




----结果

人员编号 姓名     保险基数        比率                                      单位缴费                  个人缴费                  保险补缴年月
---- ------ ----------- --------------------------------------- --------------------- --------------------- ---------------------
001  王小光    6600        0.1                                     1320.00               1320.00               200704-200705
001  王小光    5500        0.1                                     550.00                550.00                200706
001  王小光    5500        0.2                                     1100.00               1100.00               200707
002  肖光     6879        0.1                                     687.90                687.90                200705

(4 行受影响)