0

由于我缺乏经验,我不知道如何问这个问题,所以请多多包涵。

我正在使用一个SELECT语句来提取待处理的申请(即没有完成的日期)并count计算他们的总数(加上其他一些计数)。我需要收集某些项目类型,其中 8 个,其中只有 4 个目前有待处理的申请。我仍然需要在计数列中显示其他项目类型为 0。如果我尝试与将提取所有数据的查询联合起来,无论是否挂起,对于当前挂起的应用程序的 4 种项目类型,我都会得到重复的行(减去计数列)。如果我离开连接到项目类型表,我会得到一个空行。也不是我想要的。有没有人有什么建议?

联合输出:

General Construction       0    0       90    0
General Coverage           0    0       90    0
General Coverage           1    740     90    90
General Renewal            0    0       90    0
Individual Construction    0    0       90    0
Individual Coverage        0    0       180   0
Individual Renewal         0    0       90    0
Individual Renewal         2    1027    90    180
Approval                   0    0       90    0
Approval                   22   565     90    1980
Other - Renewal            0    0       90    0
Other - Renewal            21   1119    90    1890

没有必要的“0”行的输出:

General Coverage           1    740     90    90
Individual Renewal         2    1027    90    180
Other - Renewal            21   1119    90    1890
Approval                   22   566     90    1980

我想看到的输出是:

    General Construction        0   0    90    0
    General Coverage            1   740  90    90
    General Renewal             0   0    90    0
    Individual Construction     0   0    90    0
    Individual Coverage         0   0    180   0
    Individual Renewal          2   1027 90    180
    Approval                    22  565  90    1980
    Other - Renewal             21  1119 90    1890    

请让我知道我还能提供什么来帮助您帮助我。

4

1 回答 1

0

您不提供列名或类似名称。

您需要的是一个包含所有有效值的驱动程序表。然后,您可以使用left outer join来获取所需的结果集:

select driver.val, coalesce(q.col2, 0), coalesce(q.col3, 0), coalesce(q.col4, 0)
from (select 'General Construction' as val from dual union all
      select 'General Coverage'  as val from dual union all
      select 'General Renewal'  as val from dual union all
      select 'Individual Construction' as val from dual union all
      select 'Individual Coverage'  as val from dual union all
      select 'Individual Renewal' as val from dual union all
      select 'Approval' as val from dual union all
      select 'Other - Renewal' as val from dual
     ) driver left outer join
     (query without 0 rows) q
     on driver.val = q.col1

如果 NULL 可以代替 0,则coalesce()不需要 。

于 2013-01-31T15:54:10.120 回答