0

我有一个如下查询,仅当booklet_type存在列记录时才输出总和。它将结果分组为“GR”和“PI”等类型。

例如,如果 GR 具有'5' 和 '4'end_leaf_no并且start_leaf_no相同,PI则记录将显示在匹配的 booking_date 上,例如,

GR 2

PI 2

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

GR 0

PI 0

我该如何去完成这个结果?我在 select 子句中尝试过 case 但无济于事。

谢谢。

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
4

1 回答 1

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子句中。

于 2013-08-02T17:59:18.547 回答