Sql分组排序

TBAG 2009-08-30 08:06:37
有一table
A B C seq
1 1 12 1
1 1 13 2
1 1 14 3
1 2 15 1
1 2 16 2
1 2 17 3
1 2 18 4

就是现在seq列的排名是按照A和B列来的
...全文
59 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
guguda2008 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 guguda2008 的回复:]
如果C列同一组内有重复的怎么处理
[/Quote]
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-08-30 20:18:42
-- Verstion:
-- 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]([A] int,[B] int,[C] int)
insert [tb]
select 1,1,12 union all
select 1,1,13 union all
select 1,1,14 union all
select 1,2,15 union all
select 1,2,15 union all
select 1,2,17 union all
select 1,2,18
--------------开始查询--------------------------
select *,
seq=(SELECT COUNT(c) FROM tb WHERE c<a.c and b=a.b)+1 from tb a order by c
----------------小F的结果----------------------------
/*
1 1 12 1
1 1 13 2
1 1 14 3
1 2 15 1
1 2 15 1 ****这里的数字有问题****
1 2 17 3
1 2 18 4
*/


select iDentity(int,1,1) 'ID',*
INTO #TEMP from tb a order by c
SELECT *,
seq=(SELECT COUNT(c) FROM #TEMP WHERE ID<a.ID and a=a.a and b=a.b)+1
FROM #TEMP A order by c
DROP TABLE #TEMP
----------------我的结果----------------------------
/* A B C seq
1 1 1 12 1
2 1 1 13 2
3 1 1 14 3
4 1 2 15 1
5 1 2 15 2
6 1 2 17 3
7 1 2 18 4
*/
guguda2008 2009-08-30
  • 打赏
  • 举报
回复
如果C列同一组内有重复的怎么处理
十八道胡同 2009-08-30
  • 打赏
  • 举报
回复
select *,
seq=(SELECT COUNT(c) FROM t WHERE c<a.c and a=a.a and b=a.b)+1 from t a
order by c

学习

select *,row_number() over (partition by b order by a) as seq
from t

05的这个好简单
幸运的意外 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fredrickhu 的回复:]
SQL code----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-08-30 20:18:42
-- Verstion:
-- Microsoft SQL Server 2005 - 9.00.4035.00 ¡­
[/Quote]
引用一个。
--小F-- 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 htl258 的回复:]
帮小F修改一下:
SQL codeselect*,
seq=(SELECTCOUNT(c)FROM tbWHERE c<a.cand a=a.aand b=a.b)+1from tb aorderby c
考虑A列可能存在不同值。
[/Quote]

谢谢 我没想这个 呵呵
htl258_Tony 2009-08-30
  • 打赏
  • 举报
回复
帮小F修改一下:
select *,
seq=(SELECT COUNT(c) FROM tb WHERE c<a.c and a=a.a and b=a.b)+1 from tb a order by c

考虑A列可能存在不同值。
十八道胡同 2009-08-30
  • 打赏
  • 举报
回复
--tony
--> 生成测试数据表

If not object_id('[t]') is null
Drop table [t]
Go
Create table [t]([A] int,[B] int,[C] int)
Insert t
Select 1,1,12 union all
Select 1,1,13 union all
Select 1,1,14 union all
Select 1,2,15 union all
Select 1,2,16 union all
Select 1,2,17 union all
Select 1,2,18
Go
--select * from t

select *,row_number() over (partition by b order by a)
from t






1 1 12 1
1 1 13 2
1 1 14 3
1 2 15 1
1 2 16 2
1 2 17 3
1 2 18 4
guguda2008 2009-08-30
  • 打赏
  • 举报
回复
用INSERT IDENTITY(INT,1,1) INTO 也行吧
--小F-- 2009-08-30
  • 打赏
  • 举报
回复
----------------------------------------------------------------
-- Author :fredrickhu(小F,向高手学习)
-- Date :2009-08-30 20:18:42
-- Verstion:
-- 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]([A] int,[B] int,[C] int)
insert [tb]
select 1,1,12 union all
select 1,1,13 union all
select 1,1,14 union all
select 1,2,15 union all
select 1,2,16 union all
select 1,2,17 union all
select 1,2,18
--------------开始查询--------------------------
select *,
seq=(SELECT COUNT(c) FROM tb WHERE c<a.c and b=a.b)+1 from tb a order by c
----------------结果----------------------------
/* A B C seq
----------- ----------- ----------- -----------
1 1 12 1
1 1 13 2
1 1 14 3
1 2 15 1
1 2 16 2
1 2 17 3
1 2 18 4

(7 行受影响)
*/
TBAG 2009-08-30
  • 打赏
  • 举报
回复
我用的是sql2000了 大哥
十八道胡同 2009-08-30
  • 打赏
  • 举报
回复
是求seq列?
rucypli 2009-08-30
  • 打赏
  • 举报
回复
select *,row_number over(order by a,b) as seq
from tb
order by a,b

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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