数据填充求教
问题如下:
原数据:
订单号 发票号 部门 业务员 开票人 产品
1 127 江苏 张三 李四 FZ01
1 FZ02
1 FZ03
2 128 湖北 郭辉 王莉 FZ01
3 129 湖北 郭辉 王莉 FZ02
3 FZ04
填充后:
订单号 发票号 部门 业务员 开票人 产品
1 127 江苏 张三 李四 FZ01
1 127 江苏 张三 李四 FZ02
1 127 江苏 张三 李四 FZ03
2 128 湖北 郭辉 王莉 FZ01
3 129 湖北 郭辉 王莉 FZ02
3 129 湖北 郭辉 王莉 FZ04
再反填充,将数据还原:
订单号 发票号 部门 业务员 开票人 产品
1 127 江苏 张三 李四 FZ01
1 FZ02
1 FZ03
2 128 湖北 郭辉 王莉 FZ01
3 129 湖北 郭辉 王莉 FZ02
3 FZ04
谢谢
[解决办法]
填充:
update a
set 发票号=b.发票号,部门=b.部门,业务员=b.业务员,开票人=b.开票人
from tablename a,tablkename b
where (a.发票号 is null or a.发票号= ' ')
and a.订单号=b.订单号
and b.发票号 is not null and b.发票号 <> ' '
反填充:
update a
set 发票号=null,部门=null,业务员=null,开票人=null
from tablename a
where exists (
select 1 from tablename
where 订单号=a.订单号
and 产品 <a.产品
)
[解决办法]
填充:
select 订单号,发票号=isnull(发票号,(select max(发票号) from test where 订单号=a.订单号 and 产品 <a.产品)),
部门=isnull(部门,(select max(部门) from test where 订单号=a.订单号 and 产品 <a.产品)),
业务员=isnull(业务员,(select max(业务员) from test where 订单号=a.订单号 and 产品 <a.产品)),
开票人=isnull(开票人,(select max(开票人) from test where 订单号=a.订单号 and 产品 <a.产品)),
产品
from test a
反填充:
select 订单号,发票号=case when 发票号 is not null and 产品 <a.产品 then null else 发票号 end,
部门=case when 部门 is not null and 产品 <a.产品 then null else 部门 end,
业务员=case when 业务员 is not null and 产品 <a.产品 then null else 业务员 end,
开票人=case when 开票人 is not null and 产品 <a.产品 then null else 开票人 end,
产品
from test a
[解决办法]
drop table #t
go
create table #t(订单号 int,发票号 int,部门 varchar(10),业务员 varchar(10),开票人 varchar(10),产品 varchar(20))
insert into #t
select 1,127, '江苏 ', '张三 ', '李四 ', 'FZ01 '
union all select 1,NULL,NULL,NULL,NULL, 'FZ02 '
union all select 1,NULL,NULL,NULL,NULL, 'FZ03 '
union all select 2,128, '湖北 ', '郭辉 ', '王莉 ', 'FZ01 '
union all select 3,129, '湖北 ', '郭辉 ', '王莉 ', 'FZ02 '
union all select 3,NULL,NULL,NULL,NULL, 'FZ04 '
update #t
set 发票号=(select top 1 发票号 from #t a where a.订单号=#t.订单号),
部门=(select top 1 部门 from #t a where a.订单号=#t.订单号),
业务员=(select top 1 业务员 from #t a where a.订单号=#t.订单号),
开票人=(select top 1 开票人 from #t a where a.订单号=#t.订单号)
/*
订单号 发票号 部门 业务员 开票人 产品
----------- ----------- ---------- ---------- ---------- --------------------
1 127 江苏 张三 李四 FZ01
1 127 江苏 张三 李四 FZ02
1 127 江苏 张三 李四 FZ03
2 128 湖北 郭辉 王莉 FZ01
3 129 湖北 郭辉 王莉 FZ02
3 129 湖北 郭辉 王莉 FZ04
(所影响的行数为 6 行)
*/
update #t
set 发票号=NULL,部门=NULL,业务员=NULL,开票人=NULL
from #t a
where 产品 <> (select top 1 b.产品 from #t b where a.订单号=b.订单号 and a.发票号=b.发票号 order by b.产品)
/*
订单号 发票号 部门 业务员 开票人 产品
----------- ----------- ---------- ---------- ---------- --------------------
1 127 江苏 张三 李四 FZ01
1 NULL NULL NULL NULL FZ02
1 NULL NULL NULL NULL FZ03
2 128 湖北 郭辉 王莉 FZ01
3 129 湖北 郭辉 王莉 FZ02
3 NULL NULL NULL NULL FZ04
(所影响的行数为 6 行)
*/