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

tạo chế độ xem oracle dựa trên so sánh dữ liệu giữa hai bảng cơ sở dữ liệu

Bạn cần LEAST() cùng với 3 truy vấn con được kết hợp với UNION điều khoản. Hai trong số các truy vấn con phải chứa FULL JOIN giữa các bảng:

CREATE VIEW V_MEMBER_FUND AS    
SELECT i.fund_isin,
       i.member_descr,
       LEAST(i.member_ratio, t.member_ratio) AS member_ratio,
       i.allocationassettype
  FROM IS_ID i
  JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
   AND t.member_descr = i.member_descr
 WHERE i.member_descr = 'O'
UNION
SELECT LEAST(NVL(i.fund_isin,t.fund_isin),NVL(t.fund_isin,i.fund_isin)) AS fund_isin,
       LEAST(NVL(i.member_descr,t.member_descr),NVL(t.member_descr,i.member_descr)) AS member_descr,
       LEAST(NVL(i.member_ratio,t.member_ratio),NVL(t.member_ratio,i.member_ratio)) AS member_ratio,
       LEAST(NVL(i.allocationassettype,t.allocationassettype),NVL(t.allocationassettype,i.allocationassettype)) AS allocationassettype
  FROM IS_ID i
  FULL JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
 WHERE (i.member_descr = 'O' OR t.member_descr = 'O' )
   AND ( t.fund_isin IS NULL OR i.fund_isin IS NULL )
UNION
SELECT t.fund_isin,
       t.member_descr,
       t.member_ratio,
       t.allocationassettype
  FROM IS_ID i
 RIGHT JOIN IS_ID_TST t
    ON t.fund_isin = i.fund_isin
   AND t.member_descr = i.member_descr
 WHERE (NVL(i.member_descr,'XYZ') != 'O' OR NVL(t.member_descr,'XYZ') != 'O' )
   AND t.fund_isin IS NOT NULL  

cho lần đầu tiên trường hợp:Chỉ cần trả lại giá trị tối thiểu trong điều khoản của member_ratio với i.member_descr = 'O' phù hợp.

trong giây trường hợp:Hai chiều (FULL JOIN ) logic được yêu cầu là cần thiết

cho thứ ba case:Một tham gia bên ngoài tương ứng với vị trí của IS_ID_TST bảng (trong trường hợp hiện tại là RIGHT JOIN ) là cần thiết cùng với các giá trị không tương đương của member_desct thành giá trị 'O' ( các giá trị thậm chí NULL phải được phân biệt và NVL() chức năng được thêm cho mục đích này )

Và tất cả các truy vấn con được chỉ định trong ba trường hợp này phải được kết hợp với UNION để cung cấp sự kết hợp thông minh theo hàng, bao gồm cả việc loại bỏ các hàng lặp lại.

Bản trình diễn



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều gì là sai với PL / SQL này? Biến ràng buộc * KHÔNG ĐƯỢC KHAI BÁO

  2. Cách hợp nhất các truy vấn của tôi thành một truy vấn duy nhất (hoặc có thể là một proc được lưu trữ ..)

  3. Kết nối Oracle với SQL Server thông qua liên kết cơ sở dữ liệu

  4. Hàm FLOOR () trong Oracle

  5. làm cách nào để mã hóa chuỗi trong HMAC-SHA256 bằng pl / sql?