SQL查询按表达式返回结果(Oracle)

时间:2017-03-29 14:29:17

标签: sql oracle

当我运行以下查询时,我得到每个会计期间的金额总和。但是在某些会计期间,我没有任何金额,所以自然地,那些没有金额总和(空)的期间不会显示在结果集中。

我想知道如何为他们返还金额为0的那些。

SELECT 
    ACCOUNTING_PERIOD, 
    SUM(RESOURCE_AMOUNT) AS TOTAL,
FROM 
    RESOURCE_TBL
GROUP BY
    ACCOUNTING_PERIOD

我得到以下结果集

accounting_period   TOTAL
-------------------------
1                   234
3                    65
5                   943
6                   299
.                   .
.                   .
.                   .

在上面的时期中,由于总和为零或为零而省略了2和4,但我想得到

accounting_period   TOTAL
-------------------------
1                   234
2                     0
3                    65
4                     0
5                   943
6                   299
.                   .
.                   .
.                   .

2 个答案:

答案 0 :(得分:2)

生成所有可能会计期间的列表,然后使用您的表格LEFT OUTER JOIN生成:

WITH accounting_periods ( accounting_period ) AS (
  SELECT LEVEL FROM DUAL CONNECT BY LEVEL <= 12
)
SELECT a.ACCOUNTING_PERIOD, 
       COALESCE( SUM(RESOURCE_AMOUNT), 0 ) AS TOTAL
FROM   accounting_periods a
       LEFT OUTER JOIN
       RESOURCE_TBL r
       ON ( a.accounting_period = r.accounting_period )
GROUP BY a.ACCOUNTING_PERIOD

答案 1 :(得分:1)

根据文章How do I get SUM function in MySQL to return '0' if no values are found?,请尝试以下内容......

SELECT ACCOUNTING_PERIOD,
       COALESCE( SUM(RESOURCE_AMOUNT), 0 ) AS TOTAL
FROM RESOURCE_TBL
GROUP BY ACCOUNTING_PERIOD;