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> 的列上的数据表进行排序