#postgre数据库不使用crosstab()函數如何实现列不确定的行转列
如题,有一个parameter表,
day 字段的值不确定,可能只有几天,也可能半年,需要转换成下面的格式:
期待各位解疑答惑,谢谢
图1是源数据格式,图2是用户想要查询出的效果,我的想法是建一个plpgsql函数让用户调用,,但是因为day的值不确定,弄不好
#postgre数据库不使用crosstab()函數如何实现列不确定的行转列
如题,有一个parameter表,
day 字段的值不确定,可能只有几天,也可能半年,需要转换成下面的格式:
期待各位解疑答惑,谢谢
图1是源数据格式,图2是用户想要查询出的效果,我的想法是建一个plpgsql函数让用户调用,,但是因为day的值不确定,弄不好
我只给出思路:
1、首先,这个函数的返回的表的列是不固定的,因此,你需要将结果集拼装成 json 或 jsonb 或自定义格式的 text 返回
2、其次,你需要通过游标提取你 parameter 表的数据
3、然后循环拼接列名及其值的SELECT部分的SQL语句,完成后拼接完整的SQL字符串(注意返回结果集也需要拼装成 json等格式)。思路是先按前面几个固定列(structure、process、type)和动态日期列写好整个SQL语句(注意:你除了行转换,还存在type列的列转行,因此你需要union all3个类似的SQL语句),然后在循环部分扩展你的动态日期列即可
4、最后,动态执行SQL:EXECUTE IMMEDIATE SQL语句变量 INTO 结果集变量