按多列但不同的标准排序

问题描述

我在 sql SERVER 中有一个表,我想从中选择使用 order by 的记录,但我遇到了不同的情况。请看下表。

EmployeeCode | EmployeeArea
    001      |     8568
    002      |     4549
    004      |     4549
    005      |     8568
    003      |     4549
    006      |     7777
    010      |     4549
    007      |     8568
    008      |     7777
    009      |     4549

如上所示,我有两个字段员工代码和员工区域。现在,我想要做的是先按员工代码排序记录,然后按员工区域排序,但不是以标准方式排序。请参阅下面所需的 o/p 以便更好地理解

  EmployeeCode   | EmployeeArea
        001      |     8568
        005      |     8568
        007      |     8568
        002      |     4549
        003      |     4549
        004      |     4549
        009      |     4549
        010      |     4549
        006      |     7777
        008      |     7777

如上所示,第一个排序是在employeeCode上,根据这个,第一个雇员(ex 001)的雇员区(8568)将所有区号为01的雇员放在一起,并按雇员代码按升序排列。 我厌倦了使用 group by、CTE、临时表等多种方式,但无法获得所需的输出。任何帮助将不胜感激。

解决方法

似乎您需要的是 MIN 中的窗口化 ORDER BY

SELECT *
FROM (VALUES('001',8568),('002',4549),('004',('005',('003',('006',7777),('010',('007',('008',('009',4549))V(EmployeeCode,EmployeeArea)
ORDER BY MIN(EmployeeCode) OVER (PARTITION BY EmployeeArea),EmployeeCode,EmployeeArea;
,

如果我理解你,你只需要按两列排序:

SELECT EmplyeeCode,EmplyeeArea
FROM yourTable
ORDER BY EmplyeeArea,EmplyeeCode

这里我在 DB<>FIDDLE 上创建了演示。输出如您所愿。