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

Posted

技术标签:

【中文标题】Sql 查询仅对一列上的数据进行排序,但不更改其他列【英文标题】:Sql query to sort data on one column only but not change the others columns 【发布时间】:2011-06-17 09:36:46 【问题描述】:

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

ID Name
1  AAA
2  BBB
3  CCC
4  DDD

这样:

ID Name
4  AAA
3  BBB
2  CCC
1  DDD

不改变其他列。

请推荐?

谢谢

【问题讨论】:

你能过去这里查询你使用吗?并解释你究竟需要什么? 不清楚你想要什么......而且我认为你不能在 SQL 中做到这一点 - 对一列进行排序,但让另一列保持不变......当你应用 ORDER BY对于 SQL 语句,您可以按该标准对 整行 进行排序。 【参考方案1】:

您可以使用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

【讨论】:

【参考方案2】:

我打算这样做:

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

您必须为每一行的名称字段和 ID 字段设置一个数字,以不同的顺序,然后将它们连接起来以以不同的顺序检索数据。

【讨论】:

【参考方案3】:

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

【讨论】:

以上是关于Sql 查询仅对一列上的数据进行排序,但不更改其他列的主要内容,如果未能解决你的问题,请参考以下文章

Jquery/JavaScript:对具有 <a> 的列上的数据表进行排序

基于另一列的最大值的列上的 SQL 内连接 [重复]

PostgreSQL 中的高效全文搜索,在另一列上排序

MariaDB/mysql SQL查询问题:我想根据另一列的组值对一列进行部分总和

特定列上的SQL内部联接

基于另一列中的值的一列上的pyspark滞后函数