【问题标题】:T-SQL ORDER by sequence of numerical valueT-SQL ORDER 按数值序列
【发布时间】:2021-06-18 18:44:34
【问题描述】:

我有以下记录集

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

rxDate rowID cntOrder
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)

感谢您的时间和帮助

【问题讨论】:

  • 您的样本结果不是按cntOrder 排序的,所以您的问题不清楚。

标签: sql sql-server tsql sql-order-by


【解决方案1】:

如果您想循环查看cntOrder 的值,则可以使用ORDER BY 中的窗口函数。这看起来像:

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

Here 是一个 dbfiddle。

【讨论】:

    【解决方案2】:

    假设您识别cntOrders 序列的方式是通过接近rowIDs,我会将cntOrders 排在rowIDs 之上,按此排序,然后按cntOrder自己:

    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        
    

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多