如何通过两种方式对一列进行排序

How to sort one column by two ways

我有一个名为 product 的 table 及其数据示例数据构造器,

+-----------+-------------+-----------+
| ProductID | ProductName | SortValue |
+-----------+-------------+-----------+
| 1         | AA12        | 0         |
+-----------+-------------+-----------+
| 2         | AA10        | 0         |
+-----------+-------------+-----------+
| 3         | AA11        | 0         |
+-----------+-------------+-----------+
| 4         | AA13        | 0         |
+-----------+-------------+-----------+
| 5         | AA1         | 2         |
+-----------+-------------+-----------+
| 6         | AA2         | 1         |
+-----------+-------------+-----------+
| 7         | AA3         | 4         |
+-----------+-------------+-----------+
| 8         | AA4         | 3         |
+-----------+-------------+-----------+
| 9         | AA5         | 5         |
+-----------+-------------+-----------+
| 10        | AA6         | 6         |
+-----------+-------------+-----------+

我需要将此 table 数据插入另一个临时 table,并使用其 SortValue 进行排序。这里可以看到多个sortvalue0。那些 0 包含 SortValue 应该按其 ProductName 插入到 table 的末尾。我的预期输出应该是,

+-----------+-------------+-----------+
| ProductID | ProductName | SortValue |
+-----------+-------------+-----------+
| 6         | AA2         | 1         |
+-----------+-------------+-----------+
| 5         | AA1         | 2         |
+-----------+-------------+-----------+
| 8         | AA4         | 3         |
+-----------+-------------+-----------+
| 7         | AA3         | 4         |
+-----------+-------------+-----------+
| 9         | AA5         | 5         |
+-----------+-------------+-----------+
| 10        | AA6         | 6         |
+-----------+-------------+-----------+
| 2         | AA10        | 0         |
+-----------+-------------+-----------+
| 3         | AA11        | 0         |
+-----------+-------------+-----------+
| 1         | AA12        | 0         |
+-----------+-------------+-----------+
| 4         | AA13        | 0         |
+-----------+-------------+-----------+

我该怎么做?我刚试过这样的东西。

DECLARE @tmp TABLE (
    [ProductID] INT,
    [ProductName] VARCHAR(50),
    [SortValue] INT )
    
    INSERT INTO @tmp
    p.ProductID,p.ProductName,p.SortValue
    SELECT FROm Product p ORDER by p.SortValue

作为初学者:数据库 table 表示 无序 行集。行没有固有的顺序:当您从 table select 时,您可以使用 order by 子句控制返回行的顺序。

所以我理解你的问题是如何按相关顺序 select 行。为此,您可以使用条件排序:

select t.*
from mytbable
order by 
    case when sortValue = 0 then 1 else 0 end,
    sortValue,
    productName

第一级排序中的 case 表达式将 sortValue 不是 0 的行放在第一位。然后,组按 sortValueproductName.

排序