当前位置: 代码迷 >> Sql Server >> 统计的sql 膜拜大神
  详细解决方案

统计的sql 膜拜大神

热度:94   发布时间:2016-04-24 19:19:26.0
求一个统计的sql 膜拜大神

我根据用户和当天的时间分组  统计出 
成功短信的条数,失败短信的条数,已经未回的短信条数,
REPORT_STAT字段等于DELIVRD代表成功,反之不等于DELIVRD就代表失败,等于NULL的代表未回短信
以及有一个字段Mobilie_Type是1代表移动号码,2代表联通号码,3代表短信号码
统计成功的短信条数中这3个号码的个数,也就是说成功移动号码数,成功联通号码数,成功电信号码数


谢谢大家.

------解决方案--------------------


SELECT userid,SUM(CASE WHEN REPORT_STAT='DELIVRD' THEN 1 ELSE 0 END) [成功条数],SUM(CASE WHEN REPORT_STAT<>'DELIVRD' THEN 1 ELSE 0 END)[失败条数] ,
SUM(CASE WHEN REPORT_STAT IS NULL  THEN 1 ELSE 0 END)[未回短信条数],
SUM(CASE WHEN MOBILE_NO_TYPE =1 AND REPORT_STAT='DELIVRD' THEN 1 ELSE 0 END )[成功条数中的移动号码数],
SUM(CASE WHEN MOBILE_NO_TYPE =2 AND REPORT_STAT='DELIVRD' THEN 1 ELSE 0 END )[成功条数中的联通号码数],
SUM(CASE WHEN MOBILE_NO_TYPE =3 AND REPORT_STAT='DELIVRD' THEN 1 ELSE 0 END )[成功条数中的电信号码数]
FROM [SMS_MT]
 GROUP BY userid

 /*
 userid               成功条数        失败条数        未回短信条数      成功条数中的移动号码数 成功条数中的联通号码数 成功条数中的电信号码数
-------------------- ----------- ----------- ----------- ----------- ----------- -----------
abc                  4           0           0           4           0           0
admin                2           2           1           2           0           0
 */
  相关解决方案