Sql查询仅对一列上的数据进行排序,但不更改其他列

时间:2011-06-17 09:36:47

标签: sql sql-server-2008

我想要一个SQL查询来显示以下数据

ID Name
1  AAA
2  BBB
3  CCC
4  DDD

这样:

ID Name
4  AAA
3  BBB
2  CCC
1  DDD

而不更改其他列。

请建议?

由于

3 个答案:

答案 0 :(得分:3)

您可以使用row_number在两个方向上对表格进行编号,然后将它们压缩在一起:

declare @t table (id int, name varchar(4))
insert @t values (1, 'AAA'), (2, 'BBB'), (3, 'CCC'), (4, 'DDD')

; with  numbered as
        (
        select  row_number() over (order by id) as rn1
        ,       row_number() over (order by id desc) as rn2
        ,       *
        from    @t
        )
select  t2.id
,       t1.name
from    numbered t1
join    numbered t2
on      t1.rn1 = t2.rn2

打印:

id  name
4   AAA
3   BBB
2   CCC
1   DDD

答案 1 :(得分:1)

我要用这样的东西:

SELECT t2.ID, t1.NAME
FROM
    (SELECT ROW_NUMBER() OVER(ORDER BY ID DESC) AS rownumber,
           Name
    FROM MyTable) as t1
    INNER JOIN
        (SELECT ROW_NUMBER() OVER(ORDER BY ID ASC) AS rownumber,
                ID
         FROM MyTable) as t2
ON t1.rownumber = t2.rownumber

您必须为Name行字段设置一个数字,并为ID字段设置不同的顺序,然后在它们之间连接以不同的顺序检索数据。

答案 2 :(得分:0)

我会使用带有order by子句的子选择作为ID列。