0

列のレコードが存在する場合にのみ合計を出力する以下のようなクエリがありますbooklet_type。「GR」や「PI」などのタイプで結果をグループ化します。

たとえば、GR にend_leaf_no' start_leaf_no5' と '4' と同じものがPIある場合、レコードは次のように一致する booking_date に表示されます。

GR2

PI2

ただし、これらは、特定の種類の小冊子が 0 回出現した場合のレコードを返しません。私はそれが欲しい、

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
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 に答える