Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да създадете изглед с множество заявки за избор, който връща множество редове в oracle?

Можете да използвате PIVOT клауза, включваща аналитична функция 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

и ако SELECT операторът се добавя от тази част CREATE OR REPLACE VIEW v1 AS , тогава ще имате нов изглед на база данни с име v1 връщане на съдържанието на това изявление от

SELECT * FROM v1

Демо

Актуализация: Все още имате опция да направите опорната точка динамична спрямо предстоящи стойности на категория, различни от текущите. Създайте функция (или процедура), включително REFCURSOR като;

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;

и след това изпълнете този код:

VAR rc REFCURSOR
EXEC :rc := Get_Categories_RS;
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. SQL заявката работи в PL/SQL, но не и във Visual Studio

  2. Променете потребителската парола чрез jdbc. Проблеми с пропуски, съдържащи въпросителни знаци

  3. Не може да се създаде Eclipse Data Source към Oracle 12c с помощта на 12c jar. Въпреки това 11g работи

  4. Инсталиране на софтуер Oracle Database 12c на Windows

  5. Винаги ли DDL операторите ви дават имплицитен комит или можете да получите имплицитно връщане назад?