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

ORACLE SQL:Điền vào các ngày còn thiếu

Bạn có thể nhận được khoảng thời gian 30 ngày kể từ SYSDATE như sau (Tôi giả sử bạn muốn bao gồm SYSDATE ?):

WITH mydates AS (
    SELECT TRUNC(SYSDATE) - 1 + LEVEL AS due_date FROM dual
   CONNECT BY LEVEL <= 31
)

Sau đó, sử dụng phần trên để thực hiện LEFT JOIN với truy vấn của bạn (có lẽ cũng không phải là một ý tưởng tồi khi đặt cả truy vấn của bạn trong CTE):

WITH mydates AS (
    SELECT TRUNC(SYSDATE) - 1 + LEVEL AS due_date FROM dual
   CONNECT BY LEVEL <= 31
), myorders AS (
    select 
    (case when trunc(so.revised_due_date) <= trunc(sysdate) 
        then trunc(sysdate) else trunc(so.revised_due_date) end) due_date, 
    (case 
        when (case when sp.pr_typ in ('VV','VD') then 'DVD' when sp.pr_typ in ('RD','CD') 
        then 'CD' end) = 'CD' 
        and  (case when so.tec_criteria in ('PI','MC') 
        then 'XX' else so.tec_criteria end) = 'OF'
        then sum(so.revised_qty_due)
    end) CD_OF_VOLUME
    from shop_order so
    left join scm_prodtyp sp
    on so.prodtyp = sp.prodtyp
    where so.order_type = 'MD' 
    and so.plant = 'W' 
    and so.status_code between '4' and '8' 
    and trunc(so.revised_due_date) <= trunc(sysdate)+30
    group by trunc(so.revised_due_date), so.tec_criteria, sp.pr_typ
    order by trunc(so.revised_due_date)
)
SELECT mydates.due_date, myorders.cd_of_volume
  FROM mydates LEFT JOIN myorders
    ON mydates.due_date = myorders.due_date;

Nếu bạn muốn hiển thị số 0 trên các ngày "bị thiếu" thay vì NULL , sử dụng COALESCE(myorders.cd_of_volume, 0) AS cd_of_volume ở trê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. ORA-00838

  2. Các giá trị lặp lại trong một cột

  3. Tại sao tôi không thể sử dụng các biến liên kết trong các câu lệnh DDL / SCL trong SQL động?

  4. So sánh ngày trong Oracle SQL

  5. Cách viết một ứng dụng .Net hoạt động với cả SqlServer và Oracle (hiện nay System.Data.OracleClient không được dùng nữa)