select 高手请进

linjianwu 2010-07-21 03:22:48
id f1 f2 f3

1 a 1 5
2 b 5 8
3 b 3 12
4 c 3 7
5 a 2 9
6 a 5 3
7 b 4 6

得出:
2 b 5 12
3 b 3 8
7 b 4 6
5 a 2 9
1 a 1 5
6 a 5 3
4 c 3 7
规则:f1里同组的第一个f3从大到小排序,f1里同组要在一起,不可以分开。请问select 要怎么写
...全文
181 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
learningcoder 2010-07-25
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 hokor 的回复:]
引用 18 楼 hokor 的回复:
引用楼主 linjianwu 的回复:
id f1 f2 f3

1 a 1 5
2 b 5 8
3 b 3 12
4 c 3 7
5 a 2 9
6 a 5 3
7 b 4 6

得出:
2 b 5 12
3 b 3 8
7 b 4 6
5 a 2 9
1 a 1 5
6 a 5 3
4 c 3 7
规则:f1里同组的……
[/Quote]

所有回答和楼主的结果都不符。。。到底是大家理解错了还是楼主笔误?
richgong 2010-07-25
  • 打赏
  • 举报
回复
收了慢慢看
csdnadmin 2010-07-24
  • 打赏
  • 举报
回复
6楼的不错,顶,高手不少啊
shuifengcun 2010-07-23
  • 打赏
  • 举报
回复
楼上各位都是高手。
hokor 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 hokor 的回复:]
引用楼主 linjianwu 的回复:
id f1 f2 f3

1 a 1 5
2 b 5 8
3 b 3 12
4 c 3 7
5 a 2 9
6 a 5 3
7 b 4 6

得出:
2 b 5 12
3 b 3 8
7 b 4 6
5 a 2 9
1 a 1 5
6 a 5 3
4 c 3 7
规则:f1里同组的第一个f3从大到小排序,f1里同组要在一……
[/Quote]
原始数据是
2 b 5 8
3 b 3 12
hokor 2010-07-23
  • 打赏
  • 举报
回复
[Quote=引用楼主 linjianwu 的回复:]
id f1 f2 f3

1 a 1 5
2 b 5 8
3 b 3 12
4 c 3 7
5 a 2 9
6 a 5 3
7 b 4 6

得出:
2 b 5 12
3 b 3 8
7 b 4 6
5 a 2 9
1 a 1 5
6 a 5 3
4 c 3 7
规则:f1里同组的第一个f3从大到小排序,f1里同组要在一起,不可以分开。请问select 要怎么写……
[/Quote]
是楼主笔误还是大家都写错了?

2 b 5 12
3 b 3 8
原始数据是 2 b 5 12
3 b 3 8

排序前后f3 列的 12 与 8 颠倒了。。。
和解?
claro 2010-07-23
  • 打赏
  • 举报
回复
楼上辛苦了。
htl258_Tony 2010-07-23
  • 打赏
  • 举报
回复
----------------------------------------------------------------------------------
-- Author : htl258(Tony)
-- Date : 2010-07-23 18:30:02
-- Version: Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
-- Jul 9 2008 14:43:34
-- Copyright (c) 1988-2008 Microsoft Corporation
-- Developer Edition on Windows NT 5.1 <X86> (Build 2600: Service Pack 3)
-- Blog : http://blog.csdn.net/htl258
----------------------------------------------------------------------------------

--> 生成测试数据表: [tb]
IF OBJECT_ID('[tb]') IS NOT NULL
DROP TABLE [tb]
GO
CREATE TABLE [tb] ([id] [int],[f1] [nvarchar](10),[f2] [int],[f3] [int])
INSERT INTO [tb]
SELECT '1','a','1','5' UNION ALL
SELECT '2','b','5','8' UNION ALL
SELECT '3','b','3','12' UNION ALL
SELECT '4','c','3','7' UNION ALL
SELECT '5','a','2','9' UNION ALL
SELECT '6','a','5','3' UNION ALL
SELECT '7','b','4','6'

-->SQL查询如下:

SELECT * FROM [tb] t ORDER BY (SELECT MAX(f3) FROM tb WHERE f1=t.f1) DESC,f3 DESC

/*
id f1 f2 f3
----------- ---------- ----------- -----------
3 b 3 12
2 b 5 8
7 b 4 6
5 a 2 9
1 a 1 5
6 a 5 3
4 c 3 7

(7 行受影响)
*/
linjianwu 2010-07-23
  • 打赏
  • 举报
回复
select * from @tb order by f1 ,f3 desc 这样排序是不行的。 这样出来。先分组了。f1里同组要是在一起了。但没有在f1里同组的第一个f3从大到小排序。只在同组情况下排序。而我要的是以分组的第一个f3排序。看清楚结果
wallhitpig 2010-07-22
  • 打赏
  • 举报
回复
11楼的可以 3楼也行
lflljt 2010-07-22
  • 打赏
  • 举报
回复
现在我觉得11L的符合LZ的要求。。
LZ应该是想,f1分组并f3排序,然后再以组为单位f3排序
是不????
andy_liucj 2010-07-21
  • 打赏
  • 举报
回复
4楼的很符合你的需求了
select * from tb order by f1, f3 desc
dla001 2010-07-21
  • 打赏
  • 举报
回复

if object_id('tempdb.dbo.#a') is not null drop table #a
create table #a (id int,f1 varchar(1),f2 int,f3 int)
insert into #a
select 1,'a',1,5 union all
select 2,'b',5,8 union all
select 3,'b',3,12 union all
select 4,'c',3,7 union all
select 5,'a',2,9 union all
select 6,'a',5,3 union all
select 7,'b',4,6


select a.id,a.f1,a.f2,a.f3 from #a a,

(select row_number() over (order by max(f3) ) as n ,f1 from #a group by f1) b
where a.f1=b.f1
order by b.n desc ,a.f3 desc

drop table #a


(7 row(s) affected)
id f1 f2 f3
----------- ---- ----------- -----------
3 b 3 12
2 b 5 8
7 b 4 6
5 a 2 9
1 a 1 5
6 a 5 3
4 c 3 7

(7 row(s) affected)

claro 2010-07-21
  • 打赏
  • 举报
回复
在SQL2005中利用DENSE_RANK()排名函数对现有数据进行排序改造
http://blog.csdn.net/claro/archive/2009/06/10/4257457.aspx
dla001 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 linjianwu 的回复:]
这样不行的。

引用 4 楼 lflljt 的回复:
引用 2 楼 wxf163 的回复:

SQL code

select * from @tb order by f1 ,f3 desc


up
[/Quote]
他的符合你的规则啊,你还有什么没说的,能一起说不
lflljt 2010-07-21
  • 打赏
  • 举报
回复
期待中。。。
lflljt 2010-07-21
  • 打赏
  • 举报
回复
哦。。
数据有限的情况下,2L的可以。。
linjianwu 2010-07-21
  • 打赏
  • 举报
回复
没有高手吗?
linjianwu 2010-07-21
  • 打赏
  • 举报
回复
这样不行的。[Quote=引用 4 楼 lflljt 的回复:]
引用 2 楼 wxf163 的回复:

SQL code

select * from @tb order by f1 ,f3 desc


up
[/Quote]
lflljt 2010-07-21
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wxf163 的回复:]

SQL code

select * from @tb order by f1 ,f3 desc
[/Quote]

up
加载更多回复(3)

22,210

社区成员

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

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