如何在选择查询中添加月份

时间:2016-07-14 08:05:15

标签: sql oracle

您好,这是我从oracle

获取数据的查询
Select EXTRACT(YEAR FROM A.date_applied) Year,
       EXTRACT(Month FROM A.date_applied) Month,
       round(sum(nvl(decode(A.direction,'+',(A.quantity-a.qty_reversed)*A.cost),0))) Value
From INVENTORY_TRANSACTION_HIST2 a
group by EXTRACT(Month FROM A.date_applied),
         EXTRACT(YEAR FROM A.date_applied)
order by EXTRACT(Year FROM A.date_applied);

输出:

enter image description here

但如果没有可用于特定月份的数据,我希望输出如下所示。

如果一个月没有可用数据,则应添加月份并将该输出显示为该月的0

1 个答案:

答案 0 :(得分:1)

使用PARTITION OUTER JOIN

SELECT i.year,
       m.month,
       NVL( i.value, 0 ) AS value
FROM   ( SELECT LEVEL AS month
         FROM DUAL CONNECT BY LEVEL <= 12
       ) m
       LEFT OUTER JOIN
       ( SELECT EXTRACT( YEAR FROM date_applied ) AS year,
                EXTRACT( MONTH FROM date_applied ) AS month,
                ROUND( SUM(
                  NVL( DECODE( direction, '+', ( quantity-qty_reversed)*cost) ), 0 )
                ) ) AS value
         FROM   INVENTORY_TRANSACTION_HIST2
         GROUP BY EXTRACT( YEAR FROM date_applied ),
                EXTRACT( MONTH FROM date_applied )
       ) i
       PARTITION BY ( i.year, m.month )
       ON ( i.month = m.month )
ORDER BY i.year, m.month;