Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Bagaimana cara membuat tampilan dengan beberapa kueri pemilihan yang mengembalikan beberapa baris di Oracle?

Anda dapat menggunakan PIVOT klausa termasuk fungsi analitik ROW_NUMBER() :

SELECT "search", "Social"
  FROM (
        SELECT t.*,
               ROW_NUMBER() OVER (PARTITION BY category ORDER BY url) AS rn
          FROM t
        )
 PIVOT
    (
     MAX(url) FOR category IN ( 'search' AS "search", 'Social' AS "Social" )
    )
 ORDER BY rn

dan jika SELECT pernyataan diawali oleh bagian ini CREATE OR REPLACE VIEW v1 AS , maka Anda akan memiliki tampilan database baru dengan nama v1 mengembalikan isi pernyataan itu dengan

SELECT * FROM v1

Demo

Pembaruan : Anda masih memiliki opsi untuk membuat pivot dinamis versus nilai kategori yang berbeda yang akan datang dari yang sekarang. Buat fungsi (atau prosedur) termasuk REFCURSOR seperti;

CREATE OR REPLACE FUNCTION Get_Categories_RS RETURN SYS_REFCURSOR IS
  v_recordset SYS_REFCURSOR;
  v_sql       VARCHAR2(32767);
  v_str       VARCHAR2(32767);
BEGIN
  SELECT LISTAGG( ''''||category||''' AS "'||LOWER(category)||'"' , ',' )
                 WITHIN GROUP ( ORDER BY category )
    INTO v_str
    FROM (
          SELECT DISTINCT category
            FROM t
          );

  v_sql :=
  'SELECT *
     FROM (
           SELECT t.*,
                  ROW_NUMBER() OVER (PARTITION BY category ORDER BY url) AS rn
             FROM t
          )
    PIVOT
    (
     MAX(url) FOR category IN ( '|| v_str ||' )
    )
    ORDER BY rn';

  OPEN v_recordset FOR v_sql;
  RETURN v_recordset;
END;

lalu jalankan kode ini :

VAR rc REFCURSOR
EXEC :rc := Get_Categories_RS;
PRINT rc

dari Pengembang SQL Command Line untuk melihat set hasil.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mencoba mencari tahu panjang maksimum Rowid di Oracle

  2. sqlplus print running statement

  3. Oracle -- DENGAN KLAUSUL => GABUNG? (Kesalahan sintaks, )

  4. nama tabel dinamis di kursor

  5. Oracle SQL - Mengubah baris menjadi kolom secara dinamis