日期:2014-05-19  浏览次数:20425 次

关于序号的SQL
有一明细表A存储的数据如下

编号             品名           数量  
A001             品名一       100
A001             品名二       110
B002             品名一       200
B002             品名二       220
B002             品名三       220
C003             品名一       300

欲通过SQL得到如下结果,在原基础上加一序号
序号         编号             品名           数量
1               A001             品名一       100
1               A001             品名二       110
2               B002             品名一       200
2               B002             品名二       220
2               B002             品名三       220
3               C003             品名一       300

原则是按“编号”排序,相同编号的序号相同,编号不同,则序号在上面的序号的基础上加1。与“品名”和“数量”无关


------解决方案--------------------
select (select count(distinct 编号) from 表 where 编号 <=t.编号) as 序号,编号,品名,数量 from 表 t
------解决方案--------------------
select b.id,a.* from test a
inner join
(select code,row_number() over(order by code) as id from
(select distinct code from test)aa ) b
on a.code=b.code
------解决方案--------------------
declare @a table(a int,b varchar(4),c varchar(10),d int)
declare @i int,@aa varchar(4)
set @i=0
set @aa= ' '
insert @a(b,c,d) select * from 表A
update @a set a=@i,@i=(case when @aa <> b then @i+1 else @i end),@aa=b
select * from @A
-----------------------
create table 表A(编号 varchar(4),品名 varchar(10),数量 int)
insert 表A select
'A001 ', '品名一 ',100 union select
'A001 ', '品名二 ',110 union select
'B002 ', '品名一 ',200 union select
'B002 ', '品名二 ',220 union select
'B002 ', '品名三 ',220 union select
'C003 ', '品名一 ',300
前台实现最好