数据空值替换问题

m1010330580 2013-02-16 12:59:36
现有表b,其中拿出两个部门的数据,如下:
dptid dptname age1 age2 age3 age4 age5 year month

01010121 狼牙 0 0 0 0 0 2012 1
01010121 狼牙 0 0 -1 0 -1 2012 2
01010121 狼牙 0 0 -1 0 -1 2012 5
01010121 狼牙 0 0 0 0 0 2012 6
01010121 狼牙 0 0 -1 0 -1 2012 8
01010121 狼牙 0 0 0 5 5 2012 9
01010121 狼牙 1 0 0 0 1 2012 10
01010121 狼牙 0 0 -1 10 9 2012 11
01010121 狼牙 0 0 -2 -1 -3 2012 12
010151 新兵 0 1 2 0 3 2012 1
010151 新兵 0 2 -1 0 1 2012 3
010151 新兵 0 2 -1 0 1 2012 4
010151 新兵 0 2 -1 0 1 2012 5
010151 新兵 0 2 -1 0 1 2012 6
010151 新兵 0 2 -1 0 1 2012 7
010151 新兵 0 2 -1 0 1 2012 8
010151 新兵 0 2 -1 0 1 2012 9
010151 新兵 0 2 -1 0 1 2012 10

想要达到这种效果:如果一条数据均为0,则由前面不为0的数据补充上。并且一个部门要有12个月份的数据。还有一种情况:没有1月份数据,在这里没有表示出来,希望能考虑到。
其具体实现结果如下:
01010121 狼牙 0 0 0 0 0 2012 1
01010121 狼牙 0 0 -1 0 -1 2012 2
01010121 狼牙 0 0 -1 0 -1 2012 3
01010121 狼牙 0 0 -1 0 -1 2012 4
01010121 狼牙 0 0 -1 0 -1 2012 5
01010121 狼牙 0 0 -1 0 -1 2012 6
01010121 狼牙 0 0 -1 0 -1 2012 7
01010121 狼牙 0 0 -1 0 -1 2012 8
01010121 狼牙 0 0 0 5 5 2012 9
01010121 狼牙 1 0 0 0 1 2012 10
01010121 狼牙 0 0 -1 10 9 2012 11
01010121 狼牙 0 0 -2 -1 -3 2012 12
010151 新兵 0 1 2 0 3 2012 1
010151 新兵 0 1 2 0 3 2012 2
010151 新兵 0 2 -1 0 1 2012 3
010151 新兵 0 2 -1 0 1 2012 4
010151 新兵 0 2 -1 0 1 2012 5
010151 新兵 0 2 -1 0 1 2012 7
010151 新兵 0 2 -1 0 1 2012 8
010151 新兵 0 2 -1 0 1 2012 9
010151 新兵 0 2 -1 0 1 2012 10
010151 新兵 0 2 -1 0 1 2012 11
010151 新兵 0 2 -1 0 1 2012 12
...全文
370 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
m1010330580 2013-02-17
  • 打赏
  • 举报
回复
多谢你的回答,现在有这样一个问题,能不能实现这样的效果:不考虑空值替换,2月份的数据是=1月份数据+原2月份数据,3月份数据=2月份数据+原3月份数据,依次累加。 比如:01010121 狼牙 0 0 0 0 0 2012 1 01010121 狼牙 0 0 -1 0 -1 2012 2 01010121 狼牙 0 0 -1 0 -1 2012 5 01010121 狼牙 0 0 0 0 0 2012 6 累加之后结果: 01010121 狼牙 0 0 0 0 0 2012 1 01010121 狼牙 0 0 -1 0 -1 2012 2 01010121 狼牙 0 0 -2 0 -2 2012 5 01010121 狼牙 0 0 -2 0 -2 2012 6
伤痕累累 2013-02-16
  • 打赏
  • 举报
回复
with tb(dptid, dptname,age1,age2,age3,age4,age5,[year],[month])
as(
select '01010121','狼牙',0,0,0,0,0,2012,1 union all
select '01010121','狼牙',0,0,-1,0,-1,2012,2 union all
select '01010121','狼牙',0,0,-1,0,-1,2012,5 union all
select '01010121','狼牙',0,0,0,0,0,2012,6 union all
select '01010121','狼牙',0,0,-1,0,-1,2012,8 union all
select '01010121','狼牙',0,0,0,5,5,2012,9 union all
select '01010121','狼牙',1,0,0,0,1,2012,10 union all
select '01010121','狼牙',0,0,-1,10,9,2012,11 union all
select '01010121','狼牙',0,0,-2,-1,-3,2012,12 union all
select '010151', '新兵',0,1,2,0,3,2012,1 union all
select '010151', '新兵',0,2,-1,0,1,2012,3 union all
select '010151', '新兵',0,2,-1,0,1,2012,4 union all
select '010151', '新兵',0,2,-1,0,1,2012,5 union all
select '010151', '新兵',0,2,-1,0,1,2012,6 union all
select '010151', '新兵',0,2,-1,0,1,2012,7 union all
select '010151', '新兵',0,2,-1,0,1,2012,8 union all
select '010151', '新兵',0,2,-1,0,1,2012,9 union all
select '010151', '新兵',0,2,-1,0,1,2012,10)
select tb1.* from tb tb1
union all
select tb1.dptid, tb1.dptname,tb1.age1,tb1.age2,tb1.age3,tb1.age4,tb1.age5,tb1.[year],c.number from tb tb1 , master..spt_values c where c.type='p' and c.number between 1 and 12
and (select count(1) from tb tb2 where tb2.dptid=tb1.dptid and tb2.dptname=tb1.dptname and tb2.[year]=tb1.[year] and tb2.[month]=c.number)<1
and (select max(tb2.[month]) from tb tb2 where tb2.dptid=tb1.dptid and tb2.dptname=tb1.dptname and tb2.[year]=tb1.[year] and tb2.[month]<c.number)=tb1.[month]
order by dptid,[year],[month]
m1010330580 2013-02-16
  • 打赏
  • 举报
回复
上传图片两张,以提供方便!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧