#sql-server #sql-server-2017
Вопрос:
У меня есть таблица в SQL SERVER, из которой я хочу выбрать записи, используя порядок, но у меня другой сценарий. Пожалуйста, взгляните на нижеприведенную таблицу.
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
Как показано выше, первая сортировка выполняется по коду сотрудника, и в соответствии с этим Область сотрудников первого сотрудника(ex 001) (8568) все сотрудники с кодом области 01 будут размещены вместе, и они будут размещены в порядке asc по коду сотрудника.
Я устал использовать несколько способов, таких как group by, CTE, временные таблицы, но не могу получить желаемый результат. Любая помощь будет высоко оценена.
Комментарии:
1. Было бы лучше, если бы Emp 001 не имел области 01, но был бы выше, поэтому я бы сказал, что немного перепутайте числа.
2. Обновлено в соответствии с просьбой.
3. Ларну, если вы внимательно проверите данные, мне конкретно нужно сначала отсортировать по коду сотрудника, так как первым приоритетом является код сотрудника, а затем область сотрудников. Потому что я хочу упорядочить данные только по коду сотрудника.
4. @Niks мой (теперь удаленный) комментарий был сделан до того, как вы полностью изменили данные.
Ответ №1:
Похоже, что вам нужно окно MIN
в ORDER BY
:
SELECT *
FROM (VALUES('001',8568),
('002',4549),
('004',4549),
('005',8568),
('003',4549),
('006',7777),
('010',4549),
('007',8568),
('008',7777),
('009',4549))V(EmployeeCode,EmployeeArea)
ORDER BY MIN(EmployeeCode) OVER (PARTITION BY EmployeeArea),
EmployeeCode,
EmployeeArea;
Комментарии:
1. Отлично. Я не пробовал этого раньше. Кажется, это работает идеально.
Ответ №2:
Если я вас понимаю, вам нужно просто упорядочить по обоим столбцам:
SELECT EmplyeeCode, EmplyeeArea
FROM yourTable
ORDER BY EmplyeeArea, EmplyeeCode
Здесь я создал демо-версию на DB<>FIDDLE<>. Результат именно такой, как вы хотите.
Комментарии:
1. Марко, спасибо за ответ, но я обновил вопрос, чтобы лучше понять. Если вы видите, первая сортировка по области сотрудников не будет работать.