排序不变,根据分类加id号,value有重复,不太好表述,请进来看看数据

wxl2ooo 2010-10-23 10:40:53
A表:
user name value

a name1 300
a name2 100
a name3 100
b name4 600
b name6 300
b name7 300
c name8 400

想要的结果 根据user分类加id号,而且保持value还是按降序排列(按升序也一样,保持一致就行)

注意:value 值有相同的情况, 并且是在sql2000下执行的

id user name value

1 a name1 300
2 a name2 100
3 a name3 100
1 b name4 600
2 b name6 300
3 b name7 300
1 c name8 400
...全文
130 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
wxl2ooo 2010-10-25
  • 打赏
  • 举报
回复
非常感谢各位,问题已经圆满解决。
「已注销」 2010-10-23
  • 打赏
  • 举报
回复
SELECT     (SELECT     COUNT(1) AS Expr1
FROM [#TP]
WHERE ([USER] = T.[USER]) AND (VALUE > T.VALUE) OR
([USER] = T.[USER]) AND (VALUE = T.VALUE) AND (NAME < T.NAME)) + 1 AS ID, [USER], NAME, VALUE
FROM [#TP] AS T
ORDER BY T.[USER], ID, T.NAME

ID user name VALUE
----------- ---------- ---------- -----------
1 a name2 300
2 a name1 100
3 a name3 100
1 b name6 600
2 b name4 300
3 b name7 300
1 c name8 400

(7 row(s) affected)
dawugui 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 wxl2ooo 的回复:]
需求有点变化哦,抱歉

A表:
user name value

a name1 100
a name2 300
a name3 100
b name4 300
b name6 600
b name7 300
c name8 400

想要的结果 根据user分类加id号,并且value按降序排列(按升序也一样)

注意:……
[/Quote]
他和我的方法都行,你自己选择.
dawugui 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 wxl2ooo 的回复:]
如果原来value并不是正常排序,是乱的,现在的情况下,同时要求排序的话,改怎么解决呢
[/Quote]
create table A([user] varchar(10), name varchar(10),value int)
insert into a values('a', 'name1', 300)
insert into a values('a', 'name2', 100)
insert into a values('a', 'name3', 100)
insert into a values('b', 'name4', 600)
insert into a values('b', 'name6', 300)
insert into a values('b', 'name7', 300)
insert into a values('c', 'name8', 400)
go

--相同user+value合并名次
select id = (select count(distinct value) from a where [user] = t.[user] and value > t.value) + 1, * from a t order by t.[user] , id , t.name
/*
id user name value
----------- ---------- ---------- -----------
1 a name1 300
2 a name2 100
2 a name3 100
1 b name4 600
2 b name6 300
2 b name7 300
1 c name8 400

(所影响的行数为 7 行)
*/


--相同user+value再按照name排名
select id = (select count(1) from a where [user] = t.[user] and ((value > t.value) or (value = t.value and name < t.name))) + 1,* from a t order by t.[user] , id , t.name
/*
id user name value
----------- ---------- ---------- -----------
1 a name1 300
2 a name2 100
3 a name3 100
1 b name4 600
2 b name6 300
3 b name7 300
1 c name8 400

(所影响的行数为 7 行)
*/

drop table a
wxl2ooo 2010-10-23
  • 打赏
  • 举报
回复
需求有点变化哦,抱歉

A表:
user name value

a name1 100
a name2 300
a name3 100
b name4 300
b name6 600
b name7 300
c name8 400

想要的结果 根据user分类加id号,并且value按降序排列(按升序也一样)

注意:value 值有相同的情况, 并且是在sql2000下执行的

结果如下

id user name value

1 a name1 300
2 a name2 100
3 a name3 100
1 b name4 600
2 b name6 300
3 b name7 300
1 c name8 400
「已注销」 2010-10-23
  • 打赏
  • 举报
回复
前面的id还要参与排序么?

如要id也要排序:
最后加上order by id,value desc

如果ID不需要加入排序:
order by value desc
dawugui 2010-10-23
  • 打赏
  • 举报
回复
create table A([user] varchar(10), name varchar(10),value int)
insert into a values('a', 'name1', 300)
insert into a values('a', 'name2', 100)
insert into a values('a', 'name3', 100)
insert into a values('b', 'name4', 600)
insert into a values('b', 'name6', 300)
insert into a values('b', 'name7', 300)
insert into a values('c', 'name8', 400)
go

--相同user+value合并名次
select id = (select count(distinct value) from a where [user] = t.[user] and value > t.value) + 1, * from a t
/*
id user name value
----------- ---------- ---------- -----------
1 a name1 300
2 a name2 100
2 a name3 100
1 b name4 600
2 b name6 300
2 b name7 300
1 c name8 400

(所影响的行数为 7 行)
*/


--相同user+value再按照name排名
select id = (select count(1) from a where [user] = t.[user] and ((value > t.value) or (value = t.value and name < t.name))) + 1,* from a t
/*
id user name value
----------- ---------- ---------- -----------
1 a name1 300
2 a name2 100
3 a name3 100
1 b name4 600
2 b name6 300
3 b name7 300
1 c name8 400

(所影响的行数为 7 行)
*/

drop table a
wxl2ooo 2010-10-23
  • 打赏
  • 举报
回复
如果原来value并不是正常排序,是乱的,现在的情况下,同时要求排序的话,改怎么解决呢
「已注销」 2010-10-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxl2ooo 的回复:]

这样的话,能保持value保持降序排列吗
[/Quote]
wxl2ooo 2010-10-23
  • 打赏
  • 举报
回复
这样的话,能保持value保持降序排列吗
「已注销」 2010-10-23
  • 打赏
  • 举报
回复
SELECT ID=(SELECT COUNT(1)+1 FROM #tp p  
WHERE p.[user]=t.[user] AND NAME<t.NAME)
,[user], name ,value
FROM #tp t

ID user name value
----------- ---------- ---------- -----------
1 a name1 300
2 a name2 100
3 a name3 100
1 b name4 600
2 b name6 300
3 b name7 300
1 c name8 400

(7 row(s) affected)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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