22,302
社区成员




--sql 2005使用row_number
create table tb(产品编码 varchar(10), 订单数量 int, 模数 int)
insert into tb values('10001', 800 ,6)
insert into tb values('10001', 500 ,6)
insert into tb values('10001', 800 ,6)
insert into tb values('10002', 800 ,5)
insert into tb values('10003', 1000 ,6)
go
select 产品编码,订单数量,
模数 = (case when id = (select top 1 id from (select * , row_number() over(partition by 产品编码 order by 产品编码) as id from tb) m where m.产品编码 = t.产品编码) then 模数 else 0 end)
from (select * , row_number() over(partition by 产品编码 order by 产品编码) as id from tb) t
drop table tb
/*
产品编码 订单数量 模数
---------- ----------- -----------
10001 800 6
10001 500 0
10001 800 0
10002 800 5
10003 1000 6
(5 行受影响)
*/
--sql 2000必须使用临时表,生成一个序号
create table tb(产品编码 varchar(10), 订单数量 int, 模数 int)
insert into tb values('10001', 800 ,6)
insert into tb values('10001', 500 ,6)
insert into tb values('10001', 800 ,6)
insert into tb values('10002', 800 ,5)
insert into tb values('10003', 1000 ,6)
go
select *,id = identity(int,1,1) into tmp from tb
select 产品编码,订单数量,
模数 = (case when id = (select top 1 id from tmp where 产品编码 = t.产品编码) then 模数 else 0 end)
from tmp t
drop table tb,tmp
/*
产品编码 订单数量 模数
---------- ----------- -----------
10001 800 6
10001 500 0
10001 800 0
10002 800 5
10003 1000 6
(所影响的行数为 5 行)
*/