日期:2014-05-19  浏览次数:20498 次

分段统计!
数据表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%以上的做一类处理,不知道如何实现?
----大