请问个SQL的问题

lim220088 2010-10-22 04:32:44
单号 序号 物料代码 数量
P0001 1 TT.0001 100
P0001 2 TT.002 1003
P0001 3 TT.0003 678
P0001 TT.004 666
P0001 TT.005 777
P002 TT.001 555
P002 TT.002 777
P003 1 TT.001 666
P003 TT.002 99
P003 TT.002 888




这是错误的数据

如何通过SQL脚本做数据处理 根据单号分组,自动把序号填写进去。如下:

单号 序号 物料代码 数量
P0001 1 TT.0001 100
P0001 2 TT.002 1003
P0001 3 TT.0003 678
P0001 4 TT.004 666
P0001 5 TT.005 777
P002 1 TT.001 555
P002 2 TT.002 777
P003 1 TT.001 666
P003 2 TT.002 99
P003 3 TT.002 888
...全文
22 点赞 收藏 2
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
--小F-- 2010-10-22
[Quote=引用 1 楼 sqlcenter 的回复:]
SQL code
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(单号 varchar(8), 序号 int, 物料代码 varchar(8), 数量 int)
insert into #
select 'P0001', 1, 'TT.0001', 100 union all
……
[/Quote]
速度确实快 2000 的话 要用到临时表了
回复
SQLCenter 2010-10-22
--> 测试数据:#
if object_id('tempdb.dbo.#') is not null drop table #
create table #(单号 varchar(8), 序号 int, 物料代码 varchar(8), 数量 int)
insert into #
select 'P0001', 1, 'TT.0001', 100 union all
select 'P0001', 2, 'TT.002', 1003 union all
select 'P0001', 3, 'TT.0003', 678 union all
select 'P0001', null, 'TT.004', 666 union all
select 'P0001', null, 'TT.005', 777 union all
select 'P002', null, 'TT.001', 555 union all
select 'P002', null, 'TT.002', 777 union all
select 'P003', 1, 'TT.001', 666 union all
select 'P003', null, 'TT.002', 99 union all
select 'P003', null, 'TT.002', 888

;with cte as
(
select n = row_number()over(partition by 单号 order by getdate()), * from #
)
update cte set 序号=n

select * from #

/*
单号 序号 物料代码 数量
-------- ----------- -------- -----------
P0001 1 TT.0001 100
P0001 2 TT.002 1003
P0001 3 TT.0003 678
P0001 4 TT.004 666
P0001 5 TT.005 777
P002 1 TT.001 555
P002 2 TT.002 777
P003 1 TT.001 666
P003 2 TT.002 99
P003 3 TT.002 888
*/
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-22 04:32
社区公告
暂无公告