表A的结构为(
    id
    month  --月份 如 1,5,11
    num     -- 数量

现在要查询结果为
 月份  数量
 1      xx
 2      xx
 3      xx
 4      xx
 ..    ...
 ..    ...
 11     XX
 12     XX
现在当表A中没有12个月全部记录, 比如只有5月 8月的记录, 怎样查询才能得到12个月的记录(没有记录的数量用0填充)

解决方案 »

  1.   


    WITH A AS(SELECT ROWNUM month, 0 num FROM TABLE1 UNION
    SELECT ROWNUM month, 0 num FROM DUAL CONNECT BY ROWNUM <= 12)
    SELECT MONTH,SUM(NUM) FROM A GROUP BY MONTH ORDER BY MONTH ASC
      

  2.   

    with
    t as (select 3 mon,2 sum from dual union all 
    select 4 mon,3 sum from dual union all 
    select 5 mon,12 sum from dual union all 
    select 10 mon,22 sum from dual)
    select t2.mon,nvl(sum,0)
    from (select start_mon+level-1 mon
          from (select LEAST(min(mon),1)start_mon,GREATEST(max(mon),12)end_mon from t) t1
          connect by level<=end_mon-start_mon+1)t2,t
    where t2.mon=t.mon(+)
    order by mon;
    --替换t表