Sql группа по количеству - PullRequest
0 голосов
/ 27 ноября 2018

У меня есть одна таблица, которая содержит следующие столбцы

CampName -- Camp Name 
CampId -- Camp Code
CouponCode -- Coupon Code
IsClaimed -- Boolean flag saying if a coupon is claim or not . True or False

Эта таблица содержит все купоны.Купон используется, если флаг Isclaimed установлен в true.Значением по умолчанию для этого столбца является False

Теперь мне нужно создать еще одну таблицу

VoucherRegister: 

CampaignName 
CampaignCode
VoucherUsed --> Number of voucher of a specfic campaign which are used 
VoucherUnUsed --> Number of voucher of a specfic campaign which are unused

Любая идея о том, как ее создать

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

мой подход

 Select 
T1.CampId AS Campaign_No
,T1.CampName AS Campaign_Name
,(Select Count(T11.CampId) From LocalVouchers T11 where T11.IsClaimed = 'True' and T11.CampId=T1.CampId ) AS Voucher_Used
,(Select Count(T12.CampId) From LocalVouchers T12 where T12.IsClaimed = 'False' and T12.CampId=T1.CampId) AS Voucher_Unused

Из LocalVouchers T1 Group по T1.CampId, T1.CampName

представляет собой комбинацию вышеуказанного решения

0 голосов
/ 27 ноября 2018

это будет работать:

select cmpname,campid,
(select sum(couponcode) from tablename group by campname where Isclaimed='IsTrue'  ) 
VoucherUsed,
(select sum(couponcode) from tablename group by campname where Isclaimed='IsFalse' ) 
VoucherUnused 
from tablename group by campname,Campid;
0 голосов
/ 27 ноября 2018

Универсальный метод будет использовать условное агрегирование:

select CampName as CampaignName,
       CampId CampaignCode,
       sum(case when IsClaimed then 1 else 0 end) as VoucherUsed
       sum(case when IsClaimed then 0 else 1 end) as VoucherUnUsed
from my_table  
group by CampName, CampId;

Могут быть более простые способы выразить это, в зависимости от базы данных, которую вы используете, но приведенное выше должно работать в любой базе данных.

0 голосов
/ 27 ноября 2018

из-за того, что ваш столбец IsClaimed является логическим, вы можете суммировать 1 и группу по CampName, CampId

select CampName CampaignName
  ,CampId CampaignCode
  , sum(IsClaimed) VoucherUsed
  , sum(NOT IsClaimed) VoucherUnUsed
from my_table  
group by CampName, CampId
...