Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak utworzyć widok z wieloma zapytaniami wybierającymi, które zwracają wiele wierszy w Oracle?

Możesz użyć PIVOT klauzula zawierająca funkcję analityczną 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

a jeśli SELECT instrukcja jest poprzedzona tą częścią CREATE OR REPLACE VIEW v1 AS , będziesz miał nowy widok bazy danych o nazwie v1 zwrócenie treści tego oświadczenia przez

SELECT * FROM v1

Demo

Aktualizacja: Nadal masz możliwość uczynienia osi dynamicznej w porównaniu z nadchodzącymi innymi wartościami kategorii niż obecne. Utwórz funkcję (lub procedurę) zawierającą REFCURSOR takich jak;

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;

a następnie uruchom ten kod :

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

od Programisty SQL wiersza poleceń, aby zobaczyć zestaw wyników.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wdrażanie blokowania optymistycznego w Oracle

  2. ORACLE Jak używać szpuli z dynamiczną lokalizacją szpuli

  3. ORA-00904:ID:nieprawidłowy identyfikator

  4. „ORA-00922:brakująca lub nieprawidłowa opcja” podczas próby wstawienia do tabeli

  5. Oświadczenie wstaw Oracle, jeśli nie istnieje