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
序列的方式是接近 rowID
s,我会将 cntOrder
s 排在 rowID
s 之上,按那个排序,然后按 cntOrder
s 本身排序:
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.
我有以下记录集
我需要按顺序从 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
序列的方式是接近 rowID
s,我会将 cntOrder
s 排在 rowID
s 之上,按那个排序,然后按 cntOrder
s 本身排序:
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.