2017-11-25 87 views
1

我有一個VARRAYS TYPE想用TABLE表達式「扁平」結構。如何用TABLE表達式「扁平」結構

的示例數據

CREATE OR REPLACE TYPE ARIS.NUMBER_VARRAY_5 AS VARRAY (5) OF NUMBER NOT NULL; 


CREATE TABLE ARIS.TEST_2 
( 
    DATE_START DATE, 
    DATE_END DATE, 
    O3   ARIS.NUMBER_VARRAY_5, 
    CATEGORY NUMBER 
) 


SET DEFINE OFF; 
Insert into TEST_2 
    (DATE_START, DATE_END, O3, CATEGORY) 
Values 
    (TO_DATE('01/01/2005 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('01/05/2005 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), NUMBER_VARRAY_5(281.25,-9999,291.5,310.5,298.75), NULL); 
Insert into TEST_2 
    (DATE_START, DATE_END, O3, CATEGORY) 
Values 
    (TO_DATE('01/02/2005 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), TO_DATE('01/06/2005 00:00:00', 'MM/DD/YYYY HH24:MI:SS'), NUMBER_VARRAY_5(-9999,291.5,310.5,298.75,300.75), NULL); 
COMMIT; 

使用SQL語句

select O3.* from test_2 t, table(t.o3) O3 

我能得到的結果

COLUMN_VALUE 
281.25 
-9999 
291.5 
310.5 
298.75 
-9999 
291.5 
310.5 
298.75 
300.75 

的問題是我怎麼得到的結果類似

DATE_START DATE_END 03.VALUE1 03.VALUE2 03.VALUE3 03.VALUE4 03.VALUE5 
01/01/2005 01/05/2005    281.25 -9999  291.5 310.5  298.75 
01/02/2005 01/06/2005    -9999  291.5  310.5 298.75 300.75 

回答

3

試試這個,

SELECT 
    * 
FROM 
    (
     select 
     t.Date_start, 
     t.Date_end, 
     row_number() OVER (PARTITION BY DATE_START, DATE_END 
     ORDER BY 
     ROWNUM) rn, 
     O3.* 
     from 
     test_2 t, 
     table(t.o3) O3 
    ) 
    PIVOT (MAX(column_value) FOR rn in 
    (
     1 as "03.VALUE1", 
     2 as "03.VALUE2", 
     3 as "03.VALUE3", 
     4 as "03.VALUE4", 
     5 as "03.VALUE5" 
    ) 
) ;