我有一个如下查询,只有当列booklet_type
的记录存在时才输出和。它将结果分组为类似' GR'和' PI'。
例如,如果GR有end_leaf_no
和start_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
答案 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
子句中。