如何使用分组依据连接链接到单个 ID 的行?



我正在编写一个脚本来创建一个表,该表将连接具有相同ID的表中的数据。输出应如下所示:"如果 DSW7841_gUDT.sOpState = 1 或 DSW7842_gUDT.sOpState = 1 或 DSW8841_gUDT.sOpState = 1,则 GLB084。ModuleInOut.mDoorOpen := 1;否则 GLB084.ModuleInOut.mDoorOpen := 0;END_IF;">

我写的脚本是这样的:

begin
create table if not exists public.opstate_mappings (
id uuid primary key default gen_random_uuid(),
door_switch_opstate_id uuid references door_switch_opstate(id) on delete cascade,
opstate_mapping text not null unique
);
insert into opstate_mapping(door_switch_opstate_id, opstate_mapping)
select door_switch_opstate.software_instance_id,
GROUP_CONCAT('IF',door_switch_opstate.door_switches,'_gUDT.sOpState = 1 OR') AS opstate_mapping
FROM door_switch_opstate
GROUP BY software_instance_id;
end;

这是我从中提取数据的表 编辑:这张图片只显示了一个与所有DOOR_SWITCHES链接的 ID,还有其他更多与其他行链接的 ID

在 Postgres 中,您寻求的命令是STRING_AGG的,如下所示:

CONCAT('IF ', 
STRING_AGG(door_switch_opstate.door_switches, '_gUDT.sOpState = 1 OR'), 
'_gUDT.sOpState = 1 THEN GLB084.ModuleInOut.mDoorOpen := 1; ELSE GLB084.ModuleInOut.mDoorOpen := 0; END_IF;'
)

最新更新