T-SQL 按数值顺序排序

T-SQL ORDER by sequence of numerical value

我有以下记录集

我需要按顺序从 1 到 4 的字段 cntOrder 获取结果顺序。所以,在这种情况下,我会

接收日期 行号 cnt订单
2021-07-25 4 1
2021-07-26 3 2
2021-07-27 2 3
2021-07-28 1 4
2021-07-21 8 1
2021-07-22 7 2

我不知道如何做到这一点。

这是数据

CREATE TABLE #Test(
rxDate SMALLDATETIME,
rowID INT,
cntNom VARCHAR(15),
cntOrder INT)



 INSERT INTO #Test VALUES
   ('2021-07-28 00:00:00', 1, 'COUCHER',4),
   ('2021-07-27 00:00:00', 2, 'SOUPER',3),
   ('2021-07-26 00:00:00', 3, 'MIDI',2),
   ('2021-07-25 00:00:00', 4, 'MATIN',1),
   ('2021-07-24 00:00:00', 5, 'COUCHER',4),
   ('2021-07-23 00:00:00', 6, 'SOUPER',3),
   ('2021-07-22 00:00:00', 7, 'MIDI',2),
   ('2021-07-21 00:00:00', 8, 'MATIN',1),
   ('2021-07-20 00:00:00', 9, 'COUCHER',4),
   ('2021-07-19 00:00:00', 10, 'SOUPER',3)

感谢您的宝贵时间和帮助

假设您识别 cntOrders 序列的方式是接近 rowIDs,我会将 cntOrders 排在 rowIDs 之上,按那个排序,然后按 cntOrders 本身排序:

SELECT  rxDate, rowID, cntOrder
FROM    (SELECT rxDate, rowID, cntOrder, 
                RANK() OVER (PARTITION BY cntOrder ORDER BY rowID) AS rk
         FROM   #Test) t
ORDER BY rk, cntOrder        

如果要循环 cntOrder 的值,则可以使用 ORDER BY 中的 window 函数。这看起来像:

select t.*
from #test t
order by row_number() over (partition by cntOrder order by rowid),
         cntOrder;

Here 是一个 db<>fiddle.