包括那些不存在为零的组

时间:2013-08-02 17:53:16

标签: sql count

我有一个如下查询,只有当列booklet_type的记录存在时才输出和。它将结果分组为类似' GR'和' PI'。

例如,如果GR有end_leaf_nostart_leaf_no为' 5'和' 4'和PI相同,然后记录将显示在匹配的booking_date上,如

GR 2

PI 2

但是,这些不会返回任何特定类型的小册子出现的记录。我想要它,

GR 0

PI 0

如何完成此结果?我在select子句中尝试过,但无济于事。

感谢。

Select Booklet_type, SUM(End_Leaf_No -  Start_Leaf_No +1) as No_of_Coupons  

from Coupon_Sale 

where date_format(Booklet_Sale_Date, '%Y%m') = :ccyymm 
      and Booklet_type = “GR” or “PI” 
group by Booklet_Type

1 个答案:

答案 0 :(得分:1)

您可以使用left outer join和生成所需行的子查询来执行此操作。以下适用于大多数数据库:

Select driver.Booklet_type, SUM(cs.End_Leaf_No -  cs.Start_Leaf_No +1) as No_of_Coupons  
from (select 'GR' as Booklet_type union all
      select 'PI'
     ) driver left outer join
     Coupon_Sale cs
     on driver.Booklet_Type = cs.Booklet_Type and
        date_format(cs.Booklet_Sale_Date, '%Y%m') = :ccyymm and
        cs.Booklet_type in ('GR', 'PI')
group by driver.Booklet_Type;

为了完成这项工作,我将where条件移到on子句中。