您好,这是我从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);
输出:
但如果没有可用于特定月份的数据,我希望输出如下所示。
如果一个月没有可用数据,则应添加月份并将该输出显示为该月的0
答案 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;