按一定数据范围排序

问题描述 投票:0回答:1

我有如下表数据。有 4 列:DATE、SLIP_NO、ORDER_NO、ITEM_NAME

 日期 | SLIP_NO |订单号 |项目名
2023 年 1 月 8 日 | 006983 | J13828 | MIY-000-003
2023 年 1 月 8 日 | 006984 | J13830 | MIY-000-013
2023 年 1 月 8 日 | 006985 | J13829 | MIY-000-005
2023 年 1 月 8 日 | 076672 | J13829 | MIY-000-010
2023 年 8 月 8 日 | 006986 | J13838 | MIY-000-005
2023 年 8 月 8 日 | 006986 | J13838 | MIY-000-005
2023 年 8 月 8 日 | 006986 | J13840 | MIY-000-015
2023年8月22日 | 006997 | J13855 | MIY-000-014
2023 年 8 月 31 日 | 000035 | |税10%
2023 年 8 月 31 日 | 000034 | |税8%

我想这样排序

 日期 | SLIP_NO |订单号 |项目名
2023 年 1 月 8 日 | 006983 | J13828 | MIY-000-003
2023 年 1 月 8 日 | 006984 | J13830 | MIY-000-013
2023 年 1 月 8 日 | 006985 | J13829 | MIY-000-005
2023 年 1 月 8 日 | 076672 | J13829 | MIY-000-010
2023 年 8 月 8 日 | 006986 | J13838 | MIY-000-005
2023 年 8 月 8 日 | 006986 | J13838 | MIY-000-005
2023 年 8 月 8 日 | 006986 | J13840 | MIY-000-015
2023年8月22日 | 006997 | J13855 | MIY-000-014
2023 年 8 月 31 日 | 000034 | |税8%
2023 年 8 月 31 日 | 000035 | |税10%

两行

TAX 8%
TAX 10%
始终位于表格底部。

有没有办法只按最后两行的名称排序,而不改变两列 DATE 和 SLIP_NO 的顺序? 我希望第

TAX 8%
行始终显示在第
TAX 10%
行上方。

Image description

sql sql-server sql-order-by
1个回答
0
投票

要实现所需的排序顺序,其中包含“TAX 8%”的行出现在包含“TAX 10%”的行之前,您可以在 SQL 查询中结合使用排序和条件排序。

这是一个示例查询,它可以实现所需的排序顺序,同时保留“DATE”和“SLIP_NO”列的顺序:

SELECT DATE, SLIP_NO, ORDER_NO, ITEM_NAME
FROM your_table
ORDER BY 
  CASE 
    WHEN ITEM_NAME = 'TAX 8%' THEN 0 -- Assign a lower value to 'TAX 8%' to make it appear first
    WHEN ITEM_NAME = 'TAX 10%' THEN 1 -- Assign a higher value to 'TAX 10%' to make it appear second
    ELSE 2 -- For all other rows, maintain their original order
  END,
  DATE, -- Sort by DATE column
  SLIP_NO -- Sort by SLIP_NO column

在此查询中,

ORDER BY
子句使用
CASE
语句根据“ITEM_NAME”列的值向每行分配自定义排序值。具有“TAX 8%”的行分配较低的值 (0),具有“TAX 10%”的行分配较高的值 (1)。所有其他行通过分配值 2 来保持其原始顺序。

应用自定义排序后,查询将按“DATE”列对行进行排序,然后按“SLIP_NO”列对行进行排序,以保留其原始顺序。

通过使用此查询,您应该能够实现所需的排序顺序,其中“TAX 8%”的行出现在“TAX 10%”的行上方,同时保持“DATE”和“SLIP_NO”列的顺序.

© www.soinside.com 2019 - 2024. All rights reserved.