【问题标题】:MSSQL Sort by 2 columns then update a sort columnMSSQL 按 2 列排序,然后更新排序列
【发布时间】:2021-08-02 11:31:47
【问题描述】:

我有一个项目表,这些项目可以与日期或类别相关联或两者兼而有之。

我现在需要更新一个排序列,以便我可以在屏幕上对项目进行排序,所以是这样的;

Item Category Date
Item1 Cat1 02/08/21
Item2 Cat2 03/08/21
Item3 Cat1 03/08/21
Item4 Cat1 03/08/21
Item5 Cat2 02/08/21
Item6 Cat2 03/08/21

但是当我添加了排序列后,我需要它以这样的方式结束;

Item Category Date Order
Item1 Cat1 02/08/21 1
Item5 Cat2 02/08/21 1
Item3 Cat1 03/08/21 1
Item4 Cat1 03/08/21 2
Item6 Cat2 03/08/21 1
Item2 Cat2 03/08/21 2

所以它会执行类似“从按类别升序排列的项目中选择*,日期升序”然后它给每个“分组”一个计数,从 1 开始并为该组的每个成员递增,然后为下一组返回 1 . 因此,给具有相同类别和日期的项目一个订单,然后给下一组具有相同类别但不同日期的项目再次从 1 开始的订单,依此类推。

希望我已经正确解释了这一点......

【问题讨论】:

    标签: sql-server sorting


    【解决方案1】:

    你想要ROW_NUMBER:

    SELECT *, ROW_NUMBER() OVER (PARTITION BY Category, Date ORDER BY Item) [Order]
    FROM yourTable
    ORDER BY Date, Category;
    

    【讨论】:

    • 太棒了,正是我需要的。我确实查看了 row_number 但我一定错过了一些东西,因为它正在订购表格,显示行号,但它从 1 开始并继续递增直到表格结束
    猜你喜欢
    • 1970-01-01
    • 2010-12-14
    • 2015-04-20
    • 2023-03-05
    • 1970-01-01
    • 2016-11-07
    • 2016-05-10
    • 2017-07-01
    • 1970-01-01
    相关资源
    最近更新 更多