我正在使用SMS-Gateway,该网关具有多个具有不同编号的收费SMS服务,
每个发送给客户的SMS都有以下4种状态(转发,已交付,已过期,未交付)
现在,我具有用于充电系统的以下first_table,其中包含以下详细信息(TABLE-A)
以下是我预期的最终结果,可以预测每种短信服务的详细信息:
起初,我认为仅使用就很容易,COUNT(Case when ...)
但就我而言,我有成千上万的SMS号码(服务),因此,如果使用这种方法,它将像这样:
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='forwarded' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='delivered' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='expired' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='1111' AND B.STATUS='delivery failed' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='forwarded' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='delivered' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='expired' )
COUNT(CASE WHEN a.SMS_SHORT_CODE='5000' AND B.STATUS='delivery failed' )
...
...
...
...
...
...
...
当您有很多服务时还注意到CASE
只能处理250个条件时,上述方法不可行?
那么,left outer join
使用SMS-ID对(表B)上(表B)的(表A)进行计数并按以下方式预测每个SMS状态的最佳方法是什么?
我建议条件聚合:
select b.SMS_SHORT_CODE,
sum(case when status = 'forwaded' then 1 else 0 end) as count_of_forwaded,
sum(case when status = 'delivered' then 1 else 0 end) as count_of_status,
sum(case when status = 'expired' then 1 else 0 end) as count_of_expired,
sum(case when status = 'delivery failed' then 1 else 0 end) as count_of_delivery_failed
from TABLEB b
group by b.SMS_SHORT_CODE ;
请注意,没有JOIN
必要。您要汇总的所有数据都在中TABLEB
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句