Назначьте значения на основе приоритета в sql - PullRequest
0 голосов
/ 30 марта 2020

У меня есть таблица Обозначение , которая имеет такие значения, как:

Designation       Priority
--------------------------
President         1
Founder           1
managing director 2
creative director 3
ceo               3
ict director      4
dpo               5
school director   6

и таблица Employee :

Name  Designation
-----------------
john  president / school director
ralph ict director / dpo
ron   Managing Director / Founder
rex   Ceo/Creative Director
rick  ceo/president
nick  Founder / Managing Director

Выходные данные Я ожидаю, что это:

john   president 
ralph  ict director
ron    founder
rick   president
nick   founder

, где в наборе результатов должно быть только обозначение, имеющее более высокий ранг, чем смежное с ним.

Возможна ли такая проблема в SQL или я должен использовать Python? Я использую SQL Сервер 2019. Значения столбца «Обозначение» в таблице «Сотрудник» имеют обозначения, разделенные знаком «/".

».

1 Ответ

2 голосов
/ 30 марта 2020

Вы думаете, что ваша реляционная база данных неверна. Вам понадобятся реально 3 таблицы.

employee
+-------------------+------------+
|    employee_id    |    name    |
+-------------------+------------+
|         1         |    John    |
|         2         |    Jane    |
+-------------------+------------+

designation
+----------------------+-------------------------+----------------+
|    designation_id    |    designation_name     |    priority    |
+----------------------+-------------------------+----------------+
|          1           |    president            |       1        |
|          2           |    school director      |       1        |
|          3           |    ict director         |       2        |
+----------------------+-------------------------+----------------+

designation_to_employee
+---------+---------------------+-------------------+
|   id    |   designation_id    |    employee_id    |
+---------+---------------------+-------------------+
|   1     |          1          |       1           |
|   2     |          2          |       1           |
|   3     |          3          |       2           |
+---------+---------------------+-------------------+

С этими тремя таблицами нет необходимости для разграничения внутри таблицы. Вы можете иметь несколько назначений на одного сотрудника - И вы затем можно сортировать по указанным обозначениям.

IE

SELECT a.name, c.designation_name from employee a

LEFT JOIN designation_to_employee b
ON a.employee_id = b.employee_id

LEFT JOIN designation c
ON b.designation_id = c.designation_id

ORDER BY c.priority ASC

Конечно, если вы не хотите, чтобы Джон получал результаты дважды, потому что он президент И директор школы, вы можете GROUP BY a.employee_id или что-то в этом роде ... Этого должно быть достаточно, чтобы вы хорошо себя чувствовали. Если вы хотите все обозначений Джона, но в одном ряду, вам придется использовать NESTED SELECT в сочетании с CONCAT, который выходит за рамки этого ОП и должен быть новый вопрос о SO, если это то, что вы пытаетесь. Сначала настройте свою БД правильно и попробуйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...