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