Order by子句的意外行为

时间:2010-05-24 03:08:32

标签: sql-server sql-server-2005 sql-order-by

我有一张类似

的表格
Col1    col2 col3 col4 col5
1  5       1     4     6
1  4       0     3     7   
0  1       5     6     3
1  8       2     1     5
4  3       2     1     4

脚本是

declare @t table(col1 int, col2 int, col3 int,col4 int,col5 int)
insert into @t 
select 1,5,1,4,6 union all
select 1,4,0,3,7 union all
select 0,1,5,6,3 union all
select 1,8,2,1,5 union all
select 4,3,2,1,4

我希望输出是每列按升序排序,即

Col1 col2 col3 col4 col5
    0  1       0     1     3
    1  3       1     1     4
    1  4       2     3     5
    1  5       2     4     6
    4  8       5     6     7

怎么做?

提前致谢

2 个答案:

答案 0 :(得分:3)

排序顺序正确。

首先按col1排序,然后按col2排序(在col1中的任何重复项内),等等......

注意col2中的相同值,col2是按升序排列的:

Col1    col2    col3    col4    col5 
1       4         0     3       7 
1       5         1     4       6 
1       8         2     1       5 

这是另一个例子。想象一下,我们有一个Lastname, Firstname列表:

Smith, Ian
Smith, John
Smith, Dave
Smith, Jane
Green, Jim

Lastname ASC, Firstname ASC排序:

Green, Jim
Smith, Dave
Smith, Ian
Smith, Jane
Smith, John

答案 1 :(得分:3)

列不独立于行 - 排序顺序适用于整行,而不适用于单个列。一行中的所有数据都被理解为相关 - 您无法单独切片/切块/重新排列违反此行的数据。

你不能在当前的结构中做你想做的事。