日期:2014-05-17  浏览次数:20544 次

求一个统计的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
 */