读书人

Sql row_number运用

发布时间: 2013-01-11 11:57:35 作者: rapoo

Sql row_number使用



BillNO cNo
00893283*1T8600962858523
00893283*2T8600962858523
00893283*3T8600962858523
00893283*4T8600962858523

00893284*1T8600962858523
00893284*2T8600962858523
00893284*3T8600962858523
00893284*4T8600962858523

00893285*1T8600962858523
00893285*2T8600962858523
00893285*3T8600962858523
00893285*4T8600962858523

得到如下序号(Num)。请问如何实现
Num BillNO cNo
100893283*1T8600962858523
100893283*2T8600962858523
100893283*3T8600962858523
100893283*4T8600962858523

200893284*1T8600962858523
200893284*2T8600962858523
200893284*3T8600962858523
200893284*4T8600962858523

300893285*1T8600962858523
300893285*2T8600962858523
300893285*3T8600962858523
300893285*4T8600962858523



[解决办法]
修正下

declare @test table(BillNO varchar(15),cNo varchar(20))
insert into @test
select '00893283*1', 'T8600962858523' union all
select '00893283*2', 'T8600962858523' union all
select '00893283*3', 'T8600962858523' union all
select '00893283*4', 'T8600962858523' union all
select '00893284*1', 'T8600962858523' union all
select '00893284*2', 'T8600962858523' union all
select '00893284*3', 'T8600962858523' union all
select '00893284*4', 'T8600962858523' union all
select '00893285*1', 'T8600962858523' union all
select '00893285*2', 'T8600962858523' union all
select '00893285*3', 'T8600962858523' union all
select '00893285*4', 'T8600962858523'

select dense_rank() over(order by substring(BillNO,1,charindex('*',BillNO)-1)) Num,BillNO,cNo from @test

/*
Num BillNO cNo
-------------------- --------------- --------------------
1 00893283*1 T8600962858523
1 00893283*2 T8600962858523
1 00893283*3 T8600962858523
1 00893283*4 T8600962858523
2 00893284*1 T8600962858523
2 00893284*2 T8600962858523


2 00893284*3 T8600962858523
2 00893284*4 T8600962858523
3 00893285*1 T8600962858523
3 00893285*2 T8600962858523
3 00893285*3 T8600962858523
3 00893285*4 T8600962858523
*/


读书人网 >SQL Server

热点推荐