postgresql Postgres:将列值拉入行标题和值

llew8vvj  于 2023-06-05  发布在  PostgreSQL
关注(0)|答案(1)|浏览(194)

使用Postgres 12.8.我的表以这种方式存储单个流程示例的变量:

我需要为每个id创建单行,以便列名将是变量名(例如:appealDto、offshoreOnly、dueDate等),并且该值将是变量值。因此,它应该看起来像:

id_                 |        offshoreOnly      |     dueDate
------------------------------------------------------------
ecb-sad-23132       |      0                    |16356454656

注意这个表有一个有趣的存储变量值的方式。它使用3列(double_,long_,text_)中的1列来存储变量值,具体取决于变量的类型。

我尽力了

select v.id_ proc_id , 
    (case when v.name_='dueDate' then v.long_ else null end) due_date,
    (case when v.name_='offShoreOnly' then v.long_ else null end) offShoreOnly
from camunda_data.act_ru_variable v

这并没有给予我预期的结果。
还尝试:

select v.proc_inst_id_::text , 
     v.name_::text,
    v.long_::text
from camunda_data.act_ru_variable v 
where v.proc_def_id_ NOT ILIKE 'StartAppealProcess%'
and v.name_ in ('dueDate','offShoreOnly')

但这给了我:

有什么建议吗?先谢谢你了

ohtdti5x

ohtdti5x1#

您可能需要:

CREATE EXTENSION tablefunc SCHEMA camunda_data;

最后成功的查询是:

select * from crosstab (
$$select v.proc_inst_id_::text , 
     v.name_::text,
    v.long_::text
from camunda_data.act_ru_variable v 
where v.proc_def_id_ NOT ILIKE 'StartAppealProcess%'
and v.name_ in ('dueDate','offShoreOnly')$$)
as (proc_id text, due_date text, offshore text);

相关问题