分组编号问题

鐵蛋 2010-04-06 08:34:38
问题如下:
我需要把一数据集按某2个字段分组排列后把分组分类得到的记录分别编号,举个例子如下:
YM Name OrderNo
200901 a 014123
200901 b 014723
200901 c 015145
200902 a 015146
200902 b 015178
200902 c 015100
200903 a 014174
200901 a 015197
200903 a 016127
200901 b 014567
200901 a 016200
其中按YM,Name字段分组,就可以得到
200901 a 3条记录
200901 b 2条记录
200901 c 1条记录
200902 a 1条记录
200902 b 1条记录
200902 c 1条记录
200903 a 2条记录
现在我需要把原始数据分组分类排序后,把这些分组分类后的记录加上编号,成为如下样式:
YM Name OrderNo Item
200901 a 014123 1
200901 a 015197 2
200901 a 016200 3

200901 b 014567 1
200901 b 014723 2

200901 c 015145 1

200902 a 015146 1

200902 b 015178 1

200902 c 015100 1

200903 a 014174 1
200903 a 016127 2
请教一下哪位朋友有好的办法解决这种问题,谢谢

...全文
239 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
htl258_Tony 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xstdljj 的回复:]
如何加辅助列或临时表处理,麻烦哪位朋友指点一下
[/Quote]

辅助列:
alter table 要查的表 add 辅助列 int identity
go

临时表:
select 辅助列=identity(int),* into #临时表 from 要查的表

具体查询方法上面有了。
liuchuan_beijing 2010-04-06
  • 打赏
  • 举报
回复
学习一下下,,,
东那个升 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xstdljj 的回复:]
如何加辅助列或临时表处理,麻烦哪位朋友指点一下
[/Quote]

select *,(select COUNT(*) from tb b where a.ym=b.ym and a.name=b.name and a.OrderNo>=b.OrderNo) as rn from [tb] a
order by ym,name,3


select *,(select COUNT(*) from tb b where a.ym=b.ym and a.name=b.name and a.OrderNo>=b.OrderNo) as rn from [tb] a
order by ym,name

这句就可以了
鐵蛋 2010-04-06
  • 打赏
  • 举报
回复
如何加辅助列或临时表处理,麻烦哪位朋友指点一下
htl258_Tony 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ldslove 的回复:]
引用 3 楼 fredrickhu 的回复:
SQL code
---2000
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-06 20:38:41
-- Version:
-- Microsoft SQ……
[/Quote]
完全重复2000的要加辅助列或临时表处理
东那个升 2010-04-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fredrickhu 的回复:]
SQL code
---2000
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-06 20:38:41
-- Version:
-- Microsoft SQL Server 2005 -……
[/Quote]

F姐,如果重复行。。。。。。。
鐵蛋 2010-04-06
  • 打赏
  • 举报
回复
我试试哈,先谢谢各位热心人了
-狙击手- 2010-04-06
  • 打赏
  • 举报
回复
抢吧。
东那个升 2010-04-06
  • 打赏
  • 举报
回复
create table [tb]([YM] int,[Name] varchar(1),[OrderNo] varchar(6))
insert [tb]
select 200901,'a','014123' union all
select 200901,'b','014723' union all
select 200901,'c','015145' union all
select 200902,'a','015146' union all
select 200902,'b','015178' union all
select 200902,'c','015100' union all
select 200903,'a','014174' union all
select 200901,'a','015197' union all
select 200903,'a','016127' union all
select 200901,'b','014567' union all
select 200901,'a','016200'


--2005
select *,rn=row_number()over(partition by ym,name order by OrderNo) from [tb]

--2000

select *,(select COUNT(*) from tb b where a.ym=b.ym and a.name=b.name and a.OrderNo>=b.OrderNo) as rn from [tb] a
order by ym,name,3

YM Name OrderNo rn
----------- ---- ------- -----------
200901 a 014123 1
200901 a 015197 2
200901 a 016200 3
200901 b 014567 1
200901 b 014723 2
200901 c 015145 1
200902 a 015146 1
200902 b 015178 1
200902 c 015100 1
200903 a 014174 1
200903 a 016127 2

(11 行受影响)
--小F-- 2010-04-06
  • 打赏
  • 举报
回复
---2000
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-06 20:38:41
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([YM] int,[Name] varchar(1),[OrderNo] varchar(6))
insert [tb]
select 200901,'a','014123' union all
select 200901,'b','014723' union all
select 200901,'c','015145' union all
select 200902,'a','015146' union all
select 200902,'b','015178' union all
select 200902,'c','015100' union all
select 200903,'a','014174' union all
select 200901,'a','015197' union all
select 200903,'a','016127' union all
select 200901,'b','014567' union all
select 200901,'a','016200'
--------------开始查询--------------------------
select
*,item=(select count(1)+1 from tb where ym=t.ym and name=t.name and OrderNo<t.OrderNo)
from
[tb] t
order by
ym,name
----------------结果----------------------------
/* YM Name OrderNo item
----------- ---- ------- --------------------
200901 a 014123 1
200901 a 015197 2
200901 a 016200 3
200901 b 014567 1
200901 b 014723 2
200901 c 015145 1
200902 a 015146 1
200902 b 015178 1
200902 c 015100 1
200903 a 014174 1
200903 a 016127 2

(11 行受影响)

*/
chensxn 2010-04-06
  • 打赏
  • 举报
回复
2005就是好用,呵呵
--小F-- 2010-04-06
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2010-04-06 20:38:41
-- Version:
-- Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86)
-- Nov 24 2008 13:01:59
-- Copyright (c) 1988-2005 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([YM] int,[Name] varchar(1),[OrderNo] varchar(6))
insert [tb]
select 200901,'a','014123' union all
select 200901,'b','014723' union all
select 200901,'c','015145' union all
select 200902,'a','015146' union all
select 200902,'b','015178' union all
select 200902,'c','015100' union all
select 200903,'a','014174' union all
select 200901,'a','015197' union all
select 200903,'a','016127' union all
select 200901,'b','014567' union all
select 200901,'a','016200'
--------------开始查询--------------------------
select *,item=row_number()over(partition by ym,name order by OrderNo) from [tb]
----------------结果----------------------------
/* YM Name OrderNo item
----------- ---- ------- --------------------
200901 a 014123 1
200901 a 015197 2
200901 a 016200 3
200901 b 014567 1
200901 b 014723 2
200901 c 015145 1
200902 a 015146 1
200902 b 015178 1
200902 c 015100 1
200903 a 014174 1
200903 a 016127 2

(11 行受影响)

*/

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧