mybatis+postgresql crosstab 函数动态行转列

crosstab(text source_sql, text category_sql)
source_sql 需要行转列的原始数据
category_sql 值列
crosstab 函数有个问题就是列数量必须提前定义,不能动态生成,只能后台提前生成然后传给mybatis 作为参数 如下面的columns ,这样可以做到动态行转列,
此语句必须返回一个rowid列,一个 类别列和一个 值列。它也可能有一个或多个“额外”列。在 rowid列必须是第一个。该类别和值字段必须是最后两列,按照这个顺序。row_name和category之间的任何列都被视为“extra”。该“额外”列预计将具有相同的所有行相同ROW_NAME 值。

    SELECT
        *
    FROM
        crosstab (
    '',
    ''
        ) AS T (
        ${columns}
        )
) AS crossval

后台代码拼成 ${columns} 内容

列1 int8,
列2 VARCHAR,
列3 VARCHAR,
列4 VARCHAR

category_sql 如下:

    select  id from  emp  GROUP BY id,name order by 1

source_sql 如下:

SELECT 
        item_id  as rowid,
        emp_id as  category  ,
        score as  values
    FROM
emp_score

注意
1这里 emp表的id 是 emp_score 表的category对应,source_sql 顺序就是 第一个是列名,第二个是和category_sql 对应的字段,第三个是value,顺序是固定的
2.如果在source_sql 里面加条件查询,需要单引号转义,


            AND create_time >=`''#{begin}''` 
    

你可能感兴趣的:(java,postgre-sql)