SQL - 按订单条件分组
SQL - Grouping with order condition
我是 SQL 的新手,在 table 中有一些数据,我想根据列 CLASS
和 STATUS
进行分组,条件基于中的值两列。它将根据最高顺序分组
下图Table
场景一
Table 来源 :
ID
Class
Status
001
Platinum
ACTIVE
001
Gold
ACTIVE
001
Silver
ACTIVE
001
Regular
ACTIVE
分组后输出:
ID
Class
Status
001
Platinum
ACTIVE
场景二
Table 来源 :
ID
Class
Status
001
Gold
ACTIVE
001
Silver
INACTIVE
001
Regular
INACTIVE
分组后输出:
ID
Class
Status
001
Gold
ACTIVE
所以基本上分组将由 CLASS
和 Status
的值决定
对于CLASS
分组的顺序是
白金 > 黄金 > 白银 > 普通
对于Status
分组的顺序是
活跃 > 不活跃
有什么办法吗?
谢谢
您可以使用 sql case
语句来定义每个 class
和 subject
的顺序。然后将结果 table 排序为子查询。
select t1.ID, t1.class, t1.Status from (
select ID, Class, Status (case when 'Platinum' then 1 when 'Gold' then 2 when 'Silver' then 3 else 4 end) as sort_order1,
(case when 'active' then 1 else 2 end) as sort_order2
from table1)
order by t1.sort_order1, t1.sort_order2
我是 SQL 的新手,在 table 中有一些数据,我想根据列 CLASS
和 STATUS
进行分组,条件基于中的值两列。它将根据最高顺序分组
下图Table
场景一
Table 来源 :
ID | Class | Status |
---|---|---|
001 | Platinum | ACTIVE |
001 | Gold | ACTIVE |
001 | Silver | ACTIVE |
001 | Regular | ACTIVE |
分组后输出:
ID | Class | Status |
---|---|---|
001 | Platinum | ACTIVE |
场景二
Table 来源 :
ID | Class | Status |
---|---|---|
001 | Gold | ACTIVE |
001 | Silver | INACTIVE |
001 | Regular | INACTIVE |
分组后输出:
ID | Class | Status |
---|---|---|
001 | Gold | ACTIVE |
所以基本上分组将由 CLASS
和 Status
对于CLASS
分组的顺序是
白金 > 黄金 > 白银 > 普通
对于Status
分组的顺序是
活跃 > 不活跃
有什么办法吗?
谢谢
您可以使用 sql case
语句来定义每个 class
和 subject
的顺序。然后将结果 table 排序为子查询。
select t1.ID, t1.class, t1.Status from (
select ID, Class, Status (case when 'Platinum' then 1 when 'Gold' then 2 when 'Silver' then 3 else 4 end) as sort_order1,
(case when 'active' then 1 else 2 end) as sort_order2
from table1)
order by t1.sort_order1, t1.sort_order2