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排序条件:
1\无论怎么排列 都按照groupid进行排序,就是说以groupId为单位
2\以groupId为单位排列 再按照其它条件 排列如 先以groupid排,再按照   date 或者 levelid我的疑惑:
排列obder by 本来就是以唯一条件进行排,如果上述要求是不是违背了排列规则?问:能实现吗

解决方案 »

  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.   

    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 子句中指定的列的合计大小。
      

  6.   

    select * from tb order by groupid ,date,levelid
      

  7.   

    select * from tb order by groupid , date , levelid ,id
      

  8.   

    --楼主要的结果是这样吗?
    ----------------------------------------------------------------
    -- 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 行受影响)
    */
      

  9.   

    查查联机丛书,看看order by 用法...
      

  10.   

    order by groupId,date,levelid、
    --先按groupID排序,再按date 再按 levelid 排序
      

  11.   

    select * from tb order by groupid ,date,levelid如果 我要想按照 date升 且 levelid降 呢
    怎么排
      

  12.   


    select * from tb order by groupid ,date,levelid desc 
      

  13.   

    看来我要补充基本知识了,哎
    原来自己的sql还很弱结帖!