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
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
解决方案 »
- SQL中的CHECK约束问题
- 这个排序怎么写?
- 如何优化select col1,col2.... from table 的速度
- 怎么把SQL2005的MDF格式转换为SQL2000的?
- SQL把几行数据显示到一行上
- 电脑重装系统,sql server 2000 数据库附加不上去,提示:无效的数据库文件
- 再次请大神救命,很多数据的表做分区表要多久,已经执行一晚上了
- 请教:怎样才算大型网站?
- 请问,怎样在SQL2000中加密视图或过程(with encryption),需在存储过程中实现。
- 求提高查询效率的sql语句
- 使用BCP进行数据导入时遇到的问题
- 公司多系统多个系统都要用相同的资料,如何借助触发器只录入其中一个系统,剩余的自动同步?
WHERE p.[user]=t.[user] AND NAME<t.NAME)
,[user], name ,value
FROM #tp tID 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)
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
最后加上order by id,value desc如果ID不需要加入排序:
order by value desc
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
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
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.NAMEID 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)