在 SQL Pivot 上使用 Min 聚合
Posted
技术标签:
【中文标题】在 SQL Pivot 上使用 Min 聚合【英文标题】:Use of Min aggregation on SQL Pivot 【发布时间】:2020-11-07 10:30:05 【问题描述】:基于 min run 我想使用 pivot 将行转换为列。请帮忙。
附上问题截图。
【问题讨论】:
数据透视对于 DBMS 来说是非常特殊的。您使用的是什么 DBMS 产品? 我正在使用 Oracle 【参考方案1】:可能会创建存储函数(或过程)以创建用于动态透视的 SQL,并将结果集加载到 SYS_REFCURSOR
类型的变量中,其中首先使用 @987654322 确定正确连接的列列表@函数:
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 的命令行获取结果集。
【讨论】:
以上是关于在 SQL Pivot 上使用 Min 聚合的主要内容,如果未能解决你的问题,请参考以下文章