微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按多列但不同的标准排序

如何解决按多列但不同的标准排序

我在 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 上创建了演示。输出如您所愿。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。