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

Thêm INNER JOIN vào Truy vấn Với Truy vấn Con Với Tuyên bố Chọn Nội tuyến

Nếu không có bất kỳ câu lệnh DDL nào xác định các bảng, rất khó để kiểm tra nhưng:

  1. Bạn đang so sánh các ngày bằng cách sử dụng chuỗi - Oracle có thể đang thực hiện một chuyển đổi ngầm trở lại một ngày bằng cách sử dụng giá trị của NLS_DATE_FORMAT tham số phiên (hy vọng là DD-MON-YY ) nhưng nếu điều này thay đổi thì nó sẽ phá vỡ truy vấn (và truy vấn sẽ không thay đổi nên sẽ rất khó để gỡ lỗi). Ngừng sử dụng các chuỗi làm ngày tháng và sử dụng các ký tự ngày - tức là DATE '2016-01-01' .
  2. Bạn có HAVING đầu tiên trước mệnh đề GROUP BY mệnh đề - hoán đổi chúng xung quanh.
  3. Bạn cũng đang kết hợp phép nối dấu phẩy cũ và phép nối ANSI - thay thế phép nối dấu phẩy bằng INNER JOIN và di chuyển điều kiện tham gia ra khỏi WHERE mệnh đề.
  4. Nhóm theo A.TRADING_DWKEY||A.RM_SM_USER_CODE là không hiệu quả. Bạn đã có A.TRADING_DWKEY là một trong GROUP BY vì vậy không nối các chuỗi, chỉ bao gồm cột khác trong GROUP BY mệnh đề.

Một cái gì đó như:

Select TRADING_DWKEY,
       RM_SM_NAME,
       FIRST_TRADE,
       'New Footprint' Status,
       Null Q4Vol,
       CQVol 
From (
  Select A.TRADING_DWKEY,
         q.RM_SM_NAME,
         B.FIRST_TRADE,
         SUM(A.RISK_AMOUNT_ADJ)/1000000 CQVol 
  from   FACT_TRADE_ROLLUP A
         INNER JOIN
         ( SELECT   TRADING_DWKEY,
                    MIN(FIRST_TRADE_DATE) FIRST_TRADE  
           FROM     ACCOUNT_FIRST_LAST_TRADE_DATES
           GROUP BY TRADING_DWKEY
           HAVING   MIN(FIRST_TRADE_DATE)>= trunc(sysdate-1,'Y')
         ) B
         ON ( A.TRADING_DWKEY=B.TRADING_DWKEY )
         INNER JOIN REF_RM_SM_REGION q
         ON ( q.RM_SM_USER_CODE = A.RM_SM_USER_CODE )
  WHERE A.DATE_KEY >= DATE '2016-01-01'
  AND   ( (    A.PRODUCT_DWKEY IN('RT')
           AND A.Account_Type='Customer'
          )
        OR A.PRODUCT_DWKEY IN('OB','BS','MM')
        )
  AND   A.Role = 'SM' 
  GROUP BY A.RM_SM_USER_CODE,
           A.TRADING_DWKEY,
           q.RM_SM_NAME,
           B.FIRST_TRADE
  HAVING SUM(A.RISK_AMOUNT_ADJ)>=20000000
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle SQL tạo đầu ra ngẫu nhiên với các thẻ danh sách

  2. PHP &Oracle - oci_connect () ORA-12705:Không thể truy cập tệp dữ liệu NLS

  3. Làm thế nào để kết nối từ php với Oracle DB 12c?

  4. Khai báo &thiết lập các biến trong một câu lệnh được chọn

  5. Cách chọn tất cả các cột và số lượng (*) trong cùng một truy vấn