Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Menambahkan INNER JOIN ke Query Dengan Subquery Dengan Pernyataan Inline Select

Tanpa pernyataan DDL yang mendefinisikan tabel, sulit untuk menguji tetapi:

  1. Anda membandingkan tanggal menggunakan string - Oracle mungkin melakukan konversi implisit kembali ke tanggal menggunakan nilai NLS_DATE_FORMAT parameter sesi (yang diharapkan DD-MON-YY ) tetapi jika ini pernah berubah maka itu akan merusak kueri (dan kueri tidak akan berubah sehingga akan sulit untuk di-debug). Berhenti menggunakan string sebagai tanggal dan gunakan literal tanggal - yaitu DATE '2016-01-01' .
  2. Anda memiliki HAVING pertama klausa sebelum GROUP BY klausa - tukar mereka.
  3. Anda juga menggabungkan gabungan koma lama dan gabungan ANSI - ganti gabungan koma dengan INNER JOIN dan pindahkan kondisi join dari WHERE klausa.
  4. Mengelompokkan menurut A.TRADING_DWKEY||A.RM_SM_USER_CODE tidak efisien. Anda sudah memiliki A.TRADING_DWKEY sebagai salah satu dari GROUP BY istilah jadi jangan gabungkan string, cukup sertakan kolom lain di GROUP BY klausa.

Sesuatu seperti:

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. Kustom SessionState Oracle SessionStateStoreProviderBase

  2. bagaimana saya bisa menyandikan string di HMAC-SHA256 menggunakan pl/sql?

  3. Apa itu Sesi Oracle?

  4. Bagaimana cara merepresentasikan Oracle Interval di Java

  5. Pemicu Oracle setelah memasukkan atau menghapus