Sql server SQL Server按状态分组查询问题

Sql server SQL Server按状态分组查询问题,sql-server,Sql Server,工作台温度 ID Status 1 completed 2 approved 3 paid 4 cancel 5 approved 6 paid ID Status 1 completed 2 approved 5 approved 3 paid 6 paid 4 cancel 我想在不使用union的情况下,按照下表显示上述记录。因为这是客户要求,所以请为此提供帮助 工作台温度 ID Status 1 completed 2 a

工作台温度

ID  Status
1   completed
2   approved
3   paid
4   cancel
5   approved
6   paid
ID  Status
1   completed
2   approved
5   approved
3   paid
6   paid
4   cancel
我想在不使用union的情况下,按照下表显示上述记录。因为这是客户要求,所以请为此提供帮助

工作台温度

ID  Status
1   completed
2   approved
3   paid
4   cancel
5   approved
6   paid
ID  Status
1   completed
2   approved
5   approved
3   paid
6   paid
4   cancel

由于您试图对行进行任意排序,因此可以在
orderby
子句中使用
CASE
语句。下面是一个工作示例,它将为您提供所需的输出(针对SQL Server):


与Dan的答案几乎相同,但对于SQL Server(或任何标准SQL数据库系统):


其他关注事项-

1) 这个问题的标题似乎有误导性,因为它根本不是关于GROUP BY的,而且

2) 我认为您对
联合
也有误解-无法保证从
联合
联合所有
返回结果的顺序-在
联合
的情况下,可能会有一个排序操作来帮助服务器消除重复项,但是执行哪种排序完全取决于服务器,您不应该总是依赖于这种排序。对于一个
联合ALL
,想象一下,如果第一个查询是一个大查询,需要大量的I/O,而第二个查询很简单(例如,所需的所有数据都已经在内存中)。服务器的一个明显优化是在第二个查询仍在执行第一个查询的I/O时返回第二个查询的结果

SELECT 
  ID, 
  Status 
FROM 
  temp 
ORDER BY 
  CASE Status
      WHEN 'completed' THEN 1
      WHEN 'approved' THEN 2
      WHEN 'paid' THEN 3
      WHEN 'cancel' THEN 4
  END