在 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 聚合的主要内容,如果未能解决你的问题,请参考以下文章

同一列上具有多个聚合的 T-SQL Pivot

SQL 连接,使用 Pivot 聚合

在没有聚合的 SQL 中将行透视到列

PIVOT 没有聚合。在多列上使用 Max

PIVOT 没有聚合转换 2X2 表

SQL Server PIVOT - 多个聚合