1 a 1 2008 1
2 b 1 2009 1
3 c 2 2007 2
4 d 3 2006 3
5 e 3 2006 3
排序条件:
1\无论怎么排列 都按照groupid进行排序,就是说以groupId为单位
2\以groupId为单位排列 再按照其它条件 排列如 先以groupid排,再按照 date 或者 levelid
我的疑惑:
排列obder by 本来就是以唯一条件进行排,如果上述要求是不是违背了排列规则?
问:能实现吗
17 个解决方案
#1
select * from tb order by groupid , date , levelid
#2
select *
from tb
order by groupid,[date],levelid
?
#3
order by 后面可以跟多个列的排序.
#4
先以groupid排,在groupid 相同的情况下,再按照 date 排列或者 levelid
所以谈不上违背了排列规则
所以谈不上违背了排列规则
#5
- -
#6
ORDER BY 子句
指定结果集的排序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
语法
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]
参数
order_by_expression
指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。
可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。
ORDER BY 子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。
此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。
说明 在 ORDER BY 子句中不能使用 ntext、text 和 image 列。
ASC
指定按递增顺序,从最低值到最高值对指定列中的值进行排序。
DESC
指定按递减顺序,从最高值到最低值对指定列中的值进行排序。
空值被视为最低的可能值。
对 ORDER BY 子句中的项目数没有限制。然而,对于排序操作所需的中间级工作表的大小有 8,060 字节的限制。这限制了在 ORDER BY 子句中指定的列的合计大小。
#7
要什麼結果?
#8
select * from tb order by groupid ,date,levelid
#9
select * from tb order by groupid , date , levelid ,id
#10
--楼主要的结果是这样吗?
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-11-27 11:04:10
-- 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.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[name] varchar(1),[groupId] int,[date] int,[levelid] int)
insert [tb]
select 1,'a',1,2008,1 union all
select 2,'b',1,2009,1 union all
select 3,'c',2,2007,2 union all
select 4,'d',3,2006,3 union all
select 5,'e',3,2006,3
--------------开始查询--------------------------
select * from tb order by groupid ,date,levelid
----------------结果----------------------------
/* id name groupId date levelid
----------- ---- ----------- ----------- -----------
1 a 1 2008 1
2 b 1 2009 1
3 c 2 2007 2
4 d 3 2006 3
5 e 3 2006 3
(5 行受影响)
*/
#11
查查联机丛书,看看order by 用法...
#12
数据多样性,理论上是可以存在完全相同的两条记录的(虽然实际应该避免出现这种不容易处理的情况)
#13
order by groupId,date,levelid、
--先按groupID排序,再按date 再按 levelid 排序
--先按groupID排序,再按date 再按 levelid 排序
#14
select * from tb order by groupid ,date,levelid
如果 我要想按照 date升 且 levelid降 呢
怎么排
如果 我要想按照 date升 且 levelid降 呢
怎么排
#15
select * from tb order by groupid ,date,levelid desc
#16
看来我要补充基本知识了,哎
原来自己的sql还很弱
结帖!
原来自己的sql还很弱
结帖!
#17
又学会了一招
#1
select * from tb order by groupid , date , levelid
#2
select *
from tb
order by groupid,[date],levelid
?
#3
order by 后面可以跟多个列的排序.
#4
先以groupid排,在groupid 相同的情况下,再按照 date 排列或者 levelid
所以谈不上违背了排列规则
所以谈不上违背了排列规则
#5
- -
#6
ORDER BY 子句
指定结果集的排序。除非同时指定了 TOP,否则 ORDER BY 子句在视图、内嵌函数、派生表和子查询中无效。
语法
[ ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n ] ]
参数
order_by_expression
指定要排序的列。可以将排序列指定为列名或列的别名(可由表名或视图名限定)和表达式,或者指定为代表选择列表内的名称、别名或表达式的位置的负整数。
可指定多个排序列。ORDER BY 子句中的排序列序列定义排序结果集的结构。
ORDER BY 子句可包括未出现在此选择列表中的项目。然而,如果指定 SELECT DISTINCT,或者如果 SELECT 语句包含 UNION 运算符,则排序列必定出现在选择列表中。
此外,当 SELECT 语句包含 UNION 运算符时,列名或列的别名必须是在第一选择列表内指定的列名或列的别名。
说明 在 ORDER BY 子句中不能使用 ntext、text 和 image 列。
ASC
指定按递增顺序,从最低值到最高值对指定列中的值进行排序。
DESC
指定按递减顺序,从最高值到最低值对指定列中的值进行排序。
空值被视为最低的可能值。
对 ORDER BY 子句中的项目数没有限制。然而,对于排序操作所需的中间级工作表的大小有 8,060 字节的限制。这限制了在 ORDER BY 子句中指定的列的合计大小。
#7
要什麼結果?
#8
select * from tb order by groupid ,date,levelid
#9
select * from tb order by groupid , date , levelid ,id
#10
--楼主要的结果是这样吗?
----------------------------------------------------------------
-- Author :fredrickhu(我是小F,向高手学习)
-- Date :2009-11-27 11:04:10
-- 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.2 (Build 3790: Service Pack 1)
--
----------------------------------------------------------------
--> 测试数据:[tb]
if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([id] int,[name] varchar(1),[groupId] int,[date] int,[levelid] int)
insert [tb]
select 1,'a',1,2008,1 union all
select 2,'b',1,2009,1 union all
select 3,'c',2,2007,2 union all
select 4,'d',3,2006,3 union all
select 5,'e',3,2006,3
--------------开始查询--------------------------
select * from tb order by groupid ,date,levelid
----------------结果----------------------------
/* id name groupId date levelid
----------- ---- ----------- ----------- -----------
1 a 1 2008 1
2 b 1 2009 1
3 c 2 2007 2
4 d 3 2006 3
5 e 3 2006 3
(5 行受影响)
*/
#11
查查联机丛书,看看order by 用法...
#12
数据多样性,理论上是可以存在完全相同的两条记录的(虽然实际应该避免出现这种不容易处理的情况)
#13
order by groupId,date,levelid、
--先按groupID排序,再按date 再按 levelid 排序
--先按groupID排序,再按date 再按 levelid 排序
#14
select * from tb order by groupid ,date,levelid
如果 我要想按照 date升 且 levelid降 呢
怎么排
如果 我要想按照 date升 且 levelid降 呢
怎么排
#15
select * from tb order by groupid ,date,levelid desc
#16
看来我要补充基本知识了,哎
原来自己的sql还很弱
结帖!
原来自己的sql还很弱
结帖!
#17
又学会了一招