分段统计!
数据表Table1信息:
客户编号 理赔数量 销售数量 理赔率
0035 5 0 5
0088 37 0 37
0059 1 0 1
... ... ... ...
要求结果:
范围 客户数量 总理赔数 总销售数
0-5 7 12 0
5-10 1 5 0
10-15 2 20 0
15-20 1 18 0
说明:如果销售数量为0,则按1处理。
使用方法:
DECLARE @p INT
SET @p=5
SELECT RTRIM(p*@p)+ '- '+RTRIM((p+1)*@p) as '范围 '
,COUNT(*) AS '经销商数量 '
,SUM(T1.LP) AS '理赔数 '
,SUM(T1.Sale) AS '销售量 '
FROM
(SELECT T1.CUSID
,COUNT(TYRNO) AS 'LP '
,ISNULL(SUM(Amount),0) AS 'Sale '
,(COUNT(TYRNO)/(CASE ISNULL(SUM(Amount),0) WHEN 0 THEN 1 ELSE ISNULL(SUM(Amount),0) END))/@p AS p
FROM CTVBI T1 INNER JOIN
CTVDI T2 ON T1.CSTID=T2.CSTID LEFT JOIN
CTBAD T3 ON T1.CUSID=T3.CUSID LEFT JOIN
tb_CS_SaleAmount T4 ON T3.CUSID=T4.CustomerID
WHERE T2.Atype= '01 '
GROUP BY T1.CUSID) T1
WHERE T1.p > =0 AND T1.p <=6
GROUP BY T1.p
问题:
1、临界值统计不对,例如:0-5,如果理赔率为5,则此数据不在统计之内?
2、范围缺少,如果理赔率在20-25之间不存在数据,则此范围不显示,要求显示,合计值均为0?
3、统计要求理赔率在30%以上的做一类处理,不知道如何实现?
------解决方案--------------------1、临界值统计不对,例如:0-5,如果理赔率为5,则此数据不在统计之内?
----统计条件加上 and ISNULL(SUM(Amount),0) END))/@p <> 0 or ISNULL(SUM(Amount),0) END))=0
2、范围缺少,如果理赔率在20-25之间不存在数据,则此范围不显示,要求显示,合计值均为0?
----必须预先定义好样式,再左连你的结果
3、统计要求理赔率在30%以上的做一类处理,不知道如何实现?
----大