如果特定值不存在,请按组添加默认值

时间:2015-07-30 10:25:51

标签: sql oracle oracle11g

我有下表:

code | value | req_date

以及以下查询:

select code, sum(value) sums, req_date from TABLE
                group by code,req_date

通常编码" 0"和" 30"应该存在,无论如何我想这样做,如果不存在,以下默认记录

"0" | 0 | <date>
"30"| 0 | <date>

出现。可能的?

2 个答案:

答案 0 :(得分:1)

如果您使用的是0和30的默认值,那么使用默认数据将表联合到其他行,然后对整批进行分组应该有效:

SELECT
    code
    ,SUM(value) sums
    ,req_date
FROM
(

    SELECT
      code
      ,value
      ,req_date 
    FROM TABLE

    UNION ALL

    SELECT
      '30' AS code
      ,0 AS value
      ,SYSDATE AS req_date --default date here

    UNION ALL

    SELECT
      '0' AS code
      ,0 AS value
      ,SYSDATE AS req_date --default date here
) unionTable

GROUP BY code
,req_date

答案 1 :(得分:0)

通常对于此类问题,您可以从所有可能组合的列表开始,然后将其从此处连接到您的数据。

一般来说,这些问题分为两组,一组只需要在数据中出现的日期,另一组用于创建一个新表格,其中包含所有可能的日期。

我会假设你只能拥有你已经拥有的日期:

select 
    dc.code
    , sum(value) sums
    , dc.req_date 
from
    (select 
        * 
    from 
        (select distinct
            code
        from 
            TABLE) as codes --this gets lis to fpossible codes
        CROSS JOIN --this creates all possible combinations of codes and dates
        (select distinct
            req_date
        from
            table
            ) as dates --this is all possible dates
        ) as dc
    left outer join table as t
        on dc.req_date = t.req_date
        amd dc.code = t.code
group by 
    code
    ,req_date