需求
数据库横向数据,页面纵向展示,多结果集合并
源数据结果集- -1
源数据结果集- -2
需要的效果
第一步,将每个结果集进行列转行
关键点(利用pgsql的unnest函数):
语法:unnest(anyarray)
返回值:setof anyelement(可以理解为一个(临时)表)
说明:unnest函数将输入的数组转换成一个表,这个表的每一列都代表相应的一个数组中的元素。
如果unnest与其他字段一起出现在select中,就相当于其他字段进行了一次join。
简单来说,unnest()可以将传入的数组输出为一个表(显示为每一行数据)
这样,我们就可以先将(结果集- -1)中的每一列数据拼接成一个带有特殊字符(如:逗号等)的一列数据,然后利用pgsql的string_to_array()函数将该列切割为一个数组,再传入到unnest()函数中,执行后就是我们想要的结果(列转行)
结果集- -1 处理第一步,合并每列数据为一列
这里我们需要拼接两个字段,因为后面我们要多个结果集合并,需要有一个条件列(如上面两个结果集中,列表头是一致的,当列转行后,我们当做其条件进行多结果集的合并【PS:实际上就是左连接的条件】)
拼接–分割思路:
数据与表头一组,用‘~’隔开【多结果集左连接的关联条件】;
每一列与相邻列,用‘,’合开【列转行的关键分隔】;
格式是:
条件(表头)+“~”+数据+“,”
条件(表头)+“~”+数据+“,”
条件(表头)+“~”+数据+“,”
条件(表头)+“~”+数据+“,”
结果集- -1 处理第二步,进行列转行
1)进行字符串的切割,将该列转换为数组【利用第一步中的(列转行关键分隔)】
2)利用unnest()函数进行列–行转换
得到每一行数据格式为:条件+“~”+数据
3)将数据与条件拆分为两列,利用split_part()函数