Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

स्तंभों के लिए Oracle पिवट पंक्तियाँ

एक विकल्प PIVOT . का उपयोग करना होगा खंड

SELECT *
  FROM (SELECT t1.*, t2.tipo, t2.valor 
          FROM table1 t1 
          JOIN table2 t2 
            ON t2.id = t1.id)
 PIVOT 
 (
  MAX(valor) FOR tipo IN ( 't1' AS "t1", 't2' AS "t2", 't3' AS "t3" )
 )  

लेकिन यह स्थिर है, उदा। tipo . के लिए अलग-अलग मानों के रूप में अद्यतन करने की आवश्यकता है कॉलम जोड़ा जाता है। इसे गतिशील बनाने के लिए, आप एक फ़ंक्शन बना सकते हैं

CREATE OR REPLACE FUNCTION Get_Pivoted_Cols RETURN SYS_REFCURSOR IS
  v_recordset SYS_REFCURSOR;
  v_sql       VARCHAR2(32767); 
  v_cols      VARCHAR2(32767);      
BEGIN
  SELECT LISTAGG( ''''||tipo||''' AS "'||tipo||'"' , ',' )
          WITHIN GROUP ( ORDER BY tipo )  
    INTO v_cols
    FROM ( SELECT DISTINCT tipo FROM table2 );

  v_sql := 'SELECT *
              FROM (SELECT t1.*, t2.tipo, t2.valor 
                      FROM table1 t1 
                      JOIN table2 t2 
                        ON t2.id = t1.id)
             PIVOT 
             (
              MAX(valor) FOR tipo IN ( '|| v_cols ||' )
             )';   

  OPEN v_recordset FOR v_sql;
  RETURN v_recordset;
END;
/

और फिर

. का उपयोग करके कॉल करें
VAR rc REFCURSOR
EXEC :rc := Get_Pivoted_Cols;
PRINT rc

SQL डेवलपर के कंसोल से।

डेमो



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. इकाई ढांचा 6 और ओरेकल

  2. ORA-00913:केस का उपयोग करते समय बहुत अधिक मान जब

  3. जब हमारे पास डेटागार्ड हो तो फ्लैशबैक कैसे करें

  4. Oracle में अनुवाद (... का उपयोग करना) फ़ंक्शन

  5. oracle 10g . में कॉलम को पंक्तियों में कैसे बदलें