2017-02-02 84 views
0

このpostから動的ピボットへの解決策を得ました。 ここでは、oracleプロシージャで次の文を実装したいと考えています。oracle sqlの動的ピボット - 手順

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)); 

ありがとうございます。あなたはピボット結果にあなたがストアドプロシージャを呼び出すたびに挿入するテーブルを持っている場合

答えて

2

、あなたがこれを使用することができます:

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; 
+0

はどうもありがとうございました..私はこれを実装している成功した:) + 1vote迅速な対応 – Ram