Oracle
 sql >> база данни >  >> RDS >> Oracle

ORACLE SQL:Попълнете липсващите дати

Можете да получите 30-дневния период от SYSDATE както следва (предполагам, че искате да включите SYSDATE ?):

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

След това използвайте горното, за да направите LEFT JOIN с вашата заявка (може би не е лоша идея да поставите заявката си и в 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;

Ако искате да показвате нула на "липсващи" дати вместо NULL , използвайте COALESCE(myorders.cd_of_volume, 0) AS cd_of_volume по-горе.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Функция LEAST() в Oracle

  2. 4 начина за форматиране на число без десетични знаци в Oracle

  3. Показване на имена на всички ограничения за таблица в Oracle SQL

  4. Преобразувайте новия ред в XML в Oracle Trigger

  5. Как да променя схемата по подразбиране в sql developer?