如何解决在SQL Pivot上使用最小聚合
基于最小运行,我想使用数据透视将行转换为列。请协助。
随附问题的屏幕截图。
解决方法
可能会创建一个存储的函数(或过程)以创建用于动态数据透视的SQL,并将结果集加载到类型为SYS_REFCURSOR
的变量中,其中首先使用来确定正确连接的列列表LISTAGG()
函数:
CREATE OR REPLACE FUNCTION get_player_results RETURN SYS_REFCURSOR IS
v_recordset SYS_REFCURSOR;
v_sql VARCHAR2(32767);
v_cols VARCHAR2(32767);
BEGIN
SELECT LISTAGG( rn||' AS "Col'||rn||'"',',') WITHIN GROUP (ORDER BY rn)
INTO v_cols
FROM
(
SELECT DISTINCT ROW_NUMBER() OVER (PARTITION BY player ORDER BY run) AS rn
FROM tab t
);
v_sql :=' SELECT *
FROM (SELECT t.*,ROW_NUMBER() OVER(PARTITION BY player ORDER BY run) AS rn
FROM tab t)
PIVOT
(
MAX(run) AS "Run",MAX(year) AS "Year" FOR rn IN ( '|| v_cols ||' )
)';
OPEN v_recordset FOR v_sql;
RETURN v_recordset;
END;
/
然后调用
VAR rc REFCURSOR
EXEC :rc := get_player_results;
PRINT rc
从SQL Developer的命令行中获取结果集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。