Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORACLE SQL:Uzupełnij brakujące daty

Możesz uzyskać 30-dniowy okres od SYSDATE w następujący sposób (zakładam, że chcesz dołączyć SYSDATE ?):

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

Następnie użyj powyższego, aby wykonać LEFT JOIN z zapytaniem (być może nie jest to zły pomysł, aby umieścić zapytanie również w 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;

Jeśli chcesz wyświetlać zero w „brakujących” datach zamiast NULL , użyj COALESCE(myorders.cd_of_volume, 0) AS cd_of_volume powyżej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wypełnianie elementu drzewa grupą rekordów w formularzach Oracle

  2. Oracle odpowiednik MySQL INSERT IGNORE?

  3. ORA-12557 TNS:nie można załadować adaptera protokołu

  4. Jak utworzyć tabelę zagnieżdżoną przy użyciu typu danych zdefiniowanego przez użytkownika w bazie danych Oracle

  5. Jaka jest różnica między ROWNUM a ROW_NUMBER w bazie danych Oracle?