Как заменить значение столбца для соответствующих записей в таблице в Oracle - PullRequest
0 голосов
/ 12 июня 2019

У меня есть таблица, в которой есть несколько совпадающих значений сотрудников, т. Е. Сотрудник может находиться в нескольких отделах. Я хотел идентифицировать эти записи на основе их «имени» и «доб». если это то же самое, тогда замените "id" как приращение десятичного числа. В приведенном ниже примере: Майк работает в двух отделах (ИТ, финансы), поэтому я хочу, чтобы его конечный результат был указан в качестве идентификатора его отдела ИТ (в виде приращения десятичной дроби). Базовый идентификатор может быть идентифицирован на основании отдела ИТ.

Пожалуйста, дайте мне знать, как я могу это сделать?

enter image description here

1 Ответ

1 голос
/ 12 июня 2019

Давайте возьмем минимальный идентификатор и номер строки, разделенные на 10:

SELECT
  MIN(id) OVER(PARTITION BY name, dob) + ((ROW_NUMBER() OVER(PARTITION BY name, dob ORDER BY id)-1)/10 as id,
  name,
  dob,
  department
FROM
  emp

Я выбрал минимальный идентификатор сотрудника в качестве базового идентификатора. Если у вас другая стратегия, например, вы хотите, чтобы идентификатор ИТ-отдела формировал базовое значение, а не МИН (идентификатор), рассмотрите что-то вроде FIRST_VALUE(id) OVER(PARTITION BY ... ORDER BY case when department = 'it' then 0 else 1 end)

Я согласен с Тимом, хотя; Похоже, что ваш вопрос в значительной степени неясен, плохо определен или не до конца продуман. Что если emp находится в 10 отделах и возникает конфликт идентификаторов? Как правило, нам не важно, что такое идентификационный номер, поэтому мы не меняем его и не пытаемся заполнить пробелы и т. Д.

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