Как вписать в колонку конкатенированное значение двух других по выбокре?

Есть таблица, в которой колонки:

  1. id
  2. bp_id
  3. cef_id

Тут может быть много записей на один bp_id. То есть каждый bp_id может содержать множество строк записей. Надо сделать:

Выбрать все строки по bp_id и пронумеровать их по очереди в таблицу cef_id относительно bp_id.

То есть скажем, что есть проекты (bp_id) и список сотрудников. Надо записать в cef_id запись, которая отражала бы порядковый номер (row_number) сотрудника относительно проекта (bp_id). А если быть точнее, то значение по формату: {bp_id}_{row_number_by_bp_id}

Пока что попробовал так:

update public.cef c1
set cef_id = c1.building_project_id || '_' || bp.cnt
from (select id, ROW_NUMBER() over (order by id asc) as cnt from "public".cef) bp
where c1.id = bp.id;

Но он дописывает в конец порядковый номер записей без учета bp_id.


Ответы (1 шт):

Автор решения: mepihindeveloper

Такая вот реализация помогла

update public.cef c1
set cef_id = c1.building_project_id || '_' || bp.cnt
from (select id, ROW_NUMBER() over (PARTITION by building_project_id order by id) as cnt
from "public".cef) bp
where c1.id = bp.id;
→ Ссылка