【问题标题】:How to sort one column by two ways如何通过两种方式对一列进行排序
【发布时间】:2020-06-20 16:48:11
【问题描述】:

我有一个名为 product 的表及其数据示例数据结构如下,

+-----------+-------------+-----------+
| 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         |
+-----------+-------------+-----------+

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

+-----------+-------------+-----------+
| 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

【问题讨论】:

    标签: sql-server sql-order-by sql-insert sql-server-2016 temp-tables


    【解决方案1】:

    首先:数据库表表示无序行集。行没有固有的顺序:当您从表中select 时,您可以使用order by 子句控制返回行的顺序。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      相关资源
      最近更新 更多