Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Làm thế nào để tạo một dạng xem với nhiều truy vấn chọn trả về nhiều hàng trong oracle?

Bạn có thể sử dụng PIVOT mệnh đề bao gồm hàm phân tích 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

và nếu SELECT câu lệnh được thêm vào trước bởi phần này CREATE OR REPLACE VIEW v1 AS , sau đó bạn sẽ có một chế độ xem cơ sở dữ liệu mới với tên v1 trả lại nội dung của tuyên bố đó bằng

SELECT * FROM v1

Bản trình diễn

Cập nhật: Bạn vẫn có một tùy chọn để tạo trục xoay động so với các giá trị danh mục khác sắp tới so với các giá trị hiện tại. Tạo một hàm (hoặc thủ tục) bao gồm REFCURSOR chẳng hạn như;

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;

và sau đó chạy mã này:

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

từ Nhà phát triển SQL Dòng lệnh của để xem tập hợp kết quả.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sự khác biệt của Oracle giữa NVL và Coalesce

  2. Tiếp tục MERGE sau EXCEPTION

  3. Oracle 11g:Bỏ chia nhiều cột và bao gồm tên cột

  4. Đẩy con trỏ đơn

  5. Mệnh đề WHERE trong OPEN QUERY