mybatis+postgresql crosstab 函数动态行转列

来源:互联网 发布:淘宝客服代码怎么用 编辑:程序博客网 时间:2024/06/03 05:07

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 (    '<include refid="source_sql"/>',    '<include refid="category_sql"/>'        ) AS T (        ${columns}        )) AS crossval</select>

后台代码拼成 ${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    FROMemp_score

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

<if test="begin != null">            AND create_time >=`''#{begin}''`     </if>
原创粉丝点击