【问题标题】:Dynamic pivot in oracle sql - Procedureoracle sql中的动态数据透视 - 过程
【发布时间】:2017-06-19 22:46:08
【问题描述】:

我从这个 post 得到了一个动态枢轴的解决方案。 现在我想在 oracle 过程中实现以下语句。

clear columns
COLUMN temp_in_statement new_value str_in_statement
SELECT DISTINCT 
LISTAGG('''' || myLetter || ''' AS ' || myLetter,',')
    WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement 
FROM (SELECT DISTINCT myLetter FROM myTable);
SELECT * FROM 
(SELECT myNumber, myLetter, myValue FROM myTable)
PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));

提前致谢。

【问题讨论】:

    标签: sql oracle stored-procedures oracle11g pivot


    【解决方案1】:

    如果你有一个表,你想在每次调用存储过程时插入数据透视结果,你可以使用这个:

    CREATE OR REPLACE PROCEDURE dynamic_pivot
    AS
      v_sql LONG       := NULL;
      v_statement LONG := NULL;
    BEGIN
      SELECT DISTINCT LISTAGG(''''
        || myLetter
        || ''' AS '
        || myLetter,',') WITHIN GROUP (
      ORDER BY myLetter) AS temp_in_statement
      INTO v_statement
      FROM
        (SELECT DISTINCT myLetter FROM test_data
        );
      v_sql := 'insert into pivot_table    
          select * from (SELECT myNumber, myLetter, myValue FROM test_data    
          )    
          PIVOT    
          (      
          SUM(myValue) AS val FOR myLetter IN (' || v_statement || ')    
          )';
      EXECUTE immediate v_sql;
    END;
    

    【讨论】:

    • 非常感谢..我已经成功实现了这个:) +1vote for the quick response
    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多