【问题标题】:Oracle group value as a column headerOracle 组值作为列标题
【发布时间】:2021-03-28 19:42:41
【问题描述】:

我有一个表,我想在其中将列值显示为选择中的新列。下一张图片展示了我想要的。

我尝试使用“pivot”,但没有成功。是否可以与枢轴功能有关?

我的查询:

 select m.tmarti  as line, dsmdcp as column, vlmdmn as valuee    
 from TABLE01 m 
--pivot (count(vlmdmn for dsmdcp in ('Cintura', 'Quadril', 'Busto'))
    join TABLE02 t on t.tmarti = m.tmarti
 where cdarti = 2026397 
 order by t.seqtam, dsmdcp;

【问题讨论】:

    标签: sql oracle pivot


    【解决方案1】:

    您可以使用条件聚合来创建一个选择语句字符串,以在存储函数中动态旋转这些列,该函数返回 SYS_REFCURSOR 类型的值,例如

    CREATE OR REPLACE FUNCTION Get_Pivoted_Values RETURN SYS_REFCURSOR IS
      v_recordset SYS_REFCURSOR;
      v_sql       VARCHAR2(32767);
      v_cols      VARCHAR2(32767); 
    BEGIN
      SELECT LISTAGG( 'MAX( CASE WHEN column = '''||column||''' THEN valuee END )  
                  AS  "'||column||'"' , ',' ) WITHIN GROUP ( ORDER BY dsmdcp )
        INTO v_cols
        FROM ( SELECT DISTINCT dsmdcp
                 FROM table02 );
               
      v_sql :=
      'SELECT tmarti,'|| v_cols ||
      '  FROM
         (
          SELECT t1.tmarti AS line, dsmdcp AS column, vlmdmn AS valuee
            FROM table01 t1
            JOIN table02 t2
              ON t2.tmarti = t1.tmarti
         )
        GROUP BY tmarti';
    
      OPEN v_recordset FOR v_sql;
      RETURN v_recordset;
    END;
    /
    

    该函数可以从 SQL Developer 的控制台调用

    SQL> DECLARE
        result SYS_REFCURSOR;
    BEGIN
       :result := Get_Pivoted_Values;
    END;
    /
    
    SQL> PRINT result;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 1970-01-01
      • 1970-01-01
      • 2021-07-13
      • 1970-01-01
      • 2012-03-19
      • 1970-01-01
      相关资源
      最近更新 更多