我想要一个SQL查询来显示以下数据
ID Name
1 AAA
2 BBB
3 CCC
4 DDD
这样:
ID Name
4 AAA
3 BBB
2 CCC
1 DDD
而不更改其他列。
请建议?
由于
答案 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列。