如何更改 sql 行顺序
How to change sql row order
我有一个 table 包含每行 1 到 10 的列。
如果我想从 8 开始的 table select 那么我如何根据示例输出更改顺序。
Sample output:
8
9
10
1
2
3
4
5
6
7
您可以在order by
中使用表达式。一种方法是:
order by (case when col >= 8 then 1 else 2 end),
col asc
对于您的场景:
SELECT Col1
FROM Your_Table
ORDER BY (CASE WHEN col1 < 8 THEN col1+10 ELSE col1 END)
查询:
DECLARE @T TABLE(col1 INT)
INSERT INTO @T VALUES(1)
INSERT INTO @T VALUES(2)
INSERT INTO @T VALUES(3)
INSERT INTO @T VALUES(4)
INSERT INTO @T VALUES(5)
INSERT INTO @T VALUES(6)
INSERT INTO @T VALUES(7)
INSERT INTO @T VALUES(8)
INSERT INTO @T VALUES(9)
INSERT INTO @T VALUES(10)
SELECT Col1
FROM @T
ORDER BY (CASE WHEN col1 < 8 THEN col1+10 ELSE col1 END)
输出:
Col1
8
9
10
1
2
3
4
5
6
7
尝试使用以下方案动态输入起始值。即,如果您想从 6 开始,则将起始值设置为 8,那么以下逻辑也有效。
DECLARE @tempTable TABLE(myColumn INT)
INSERT INTO @tempTable VALUES(1)
INSERT INTO @tempTable VALUES(2)
INSERT INTO @tempTable VALUES(3)
INSERT INTO @tempTable VALUES(4)
INSERT INTO @tempTable VALUES(5)
INSERT INTO @tempTable VALUES(6)
INSERT INTO @tempTable VALUES(7)
INSERT INTO @tempTable VALUES(8)
INSERT INTO @tempTable VALUES(9)
INSERT INTO @tempTable VALUES(10)
INSERT INTO @tempTable VALUES(11)
INSERT INTO @tempTable VALUES(12)
INSERT INTO @tempTable VALUES(13)
INSERT INTO @tempTable VALUES(14)
INSERT INTO @tempTable VALUES(15)
INSERT INTO @tempTable VALUES(16)
Declare @startValue Int = 12 --"YOUR_VALUE" [Ex: 8]
SELECT myColumn
FROM @tempTable
ORDER BY (CASE WHEN myColumn < @startValue THEN myColumn+(select count(*) from @tempTable) ELSE myColumn END)
请告诉我逻辑是否适合您?谢谢,
我有一个 table 包含每行 1 到 10 的列。 如果我想从 8 开始的 table select 那么我如何根据示例输出更改顺序。
Sample output:
8
9
10
1
2
3
4
5
6
7
您可以在order by
中使用表达式。一种方法是:
order by (case when col >= 8 then 1 else 2 end),
col asc
对于您的场景:
SELECT Col1
FROM Your_Table
ORDER BY (CASE WHEN col1 < 8 THEN col1+10 ELSE col1 END)
查询:
DECLARE @T TABLE(col1 INT)
INSERT INTO @T VALUES(1)
INSERT INTO @T VALUES(2)
INSERT INTO @T VALUES(3)
INSERT INTO @T VALUES(4)
INSERT INTO @T VALUES(5)
INSERT INTO @T VALUES(6)
INSERT INTO @T VALUES(7)
INSERT INTO @T VALUES(8)
INSERT INTO @T VALUES(9)
INSERT INTO @T VALUES(10)
SELECT Col1
FROM @T
ORDER BY (CASE WHEN col1 < 8 THEN col1+10 ELSE col1 END)
输出:
Col1
8
9
10
1
2
3
4
5
6
7
尝试使用以下方案动态输入起始值。即,如果您想从 6 开始,则将起始值设置为 8,那么以下逻辑也有效。
DECLARE @tempTable TABLE(myColumn INT)
INSERT INTO @tempTable VALUES(1)
INSERT INTO @tempTable VALUES(2)
INSERT INTO @tempTable VALUES(3)
INSERT INTO @tempTable VALUES(4)
INSERT INTO @tempTable VALUES(5)
INSERT INTO @tempTable VALUES(6)
INSERT INTO @tempTable VALUES(7)
INSERT INTO @tempTable VALUES(8)
INSERT INTO @tempTable VALUES(9)
INSERT INTO @tempTable VALUES(10)
INSERT INTO @tempTable VALUES(11)
INSERT INTO @tempTable VALUES(12)
INSERT INTO @tempTable VALUES(13)
INSERT INTO @tempTable VALUES(14)
INSERT INTO @tempTable VALUES(15)
INSERT INTO @tempTable VALUES(16)
Declare @startValue Int = 12 --"YOUR_VALUE" [Ex: 8]
SELECT myColumn
FROM @tempTable
ORDER BY (CASE WHEN myColumn < @startValue THEN myColumn+(select count(*) from @tempTable) ELSE myColumn END)
请告诉我逻辑是否适合您?谢谢,