Сначала объедините два столбца, посчитайте уникальные вхождения комбинаций и обновите столбец с помощью продукта. - PullRequest
0 голосов
/ 28 сентября 2019

У меня есть этот рабочий запрос:

SELECT  jobtitle
       ,department
       ,COUNT({ fn CONCAT(jobtitle, department) }) AS occurrences
FROM mytable
GROUP BY jobtitle
        ,department

Но теперь я хотел бы обновить все записи одной и той же таблицы, обновив столбец int number, и заполнить его, используязначение переменной occurrences, созданной в запросе, где совпадают значения как заголовка, так и отдела.

Потребовалось около полдня, чтобы запрос работал.Но это немного слишком сложно.Я надеюсь, что кто-то может помочь

С уважением,

Франс

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Вам нужно объединить таблицу с вашим запросом в операторе обновления:

update m
set m.number = t.occurrences
from mytable m inner join (
  select jobtitle, department,
    count(concat(jobtitle, department)) as occurrences
  from mytable
  group by jobtitle, department
) t on t.jobtitle = m.jobtitle and t.department = m.department

Но я считаю, что вы также можете использовать count(*) вместо count(concat(jobtitle, department))

0 голосов
/ 28 сентября 2019

Ваше выражение concat() в основном совпадает с count(*) (при условии, что ни одно из значений не равно нулю.)

with data as (
    select *, count(*) over (partition by jobtitle, department) as cnt
    from T
)
update data set num = cnt;

Также следует помнить, что пары сцепленных строк могут приводить к одному и тому же значению, гдекомпоненты были неравны.Например, "A" + "BC" идентично "AB" + "C".В вашем случае я сомневаюсь, что это может произойти, но это ненужная сложность.

Вы можете увидеть это в действии здесь: https://rextester.com/CEVRX27211

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