已有充值表,如何按充值次数进行拆分统计。举例如下:
充值表(CZ):
卡号(cardno) 充值次数(times) 充值日期(loddate) 充值金额(lodamt)
91034567 1 2010-2-12 100
91034567 2 2010-5-21 100
91034567 3 2010-9-16 200
91045678 1 2010-3-1 200
91045678 2 2010-3-23 300
91056789 1 2010-2-19 300

想得到如下结果:
table1:(充值次数为三次的记录)
卡号(cardno) 充值次数(times) 充值日期(loddate) 充值金额(lodamt)
91034567 1 2010-2-12 100
91034567 2 2010-5-21 100
91034567 3 2010-9-16 200

table2:(充值次数为两次的记录)
卡号(cardno) 充值次数(times) 充值日期(loddate) 充值金额(lodamt)
91045678 1 2010-3-1 200
91045678 2 2010-3-23 300

table3:(充值次数和金额的统计,按卡号和次数排列)
卡号(cardno) 充值次数(times) 充值金额(lodamtall)
91034567 3  400
91045678 2  500
91056789 1  300

请各位大侠指教啊

解决方案 »

  1.   

    1.充值次数为三次的记录
    SELECT * FROM CZ WHERE CARDNO IN (SELECT CARDNO FROM CZ GROUP BY CARDNO HAVING COUNT(*) =3)2.充值次数为二次的记录
    SELECT * FROM CZ WHERE CARDNO IN (SELECT CARDNO FROM CZ GROUP BY CARDNO HAVING COUNT(*) =2)3.充值次数和金额的统计
    SELECT cardno,count(*) ,sum(lodamtall) FROM CZ group by cardno,sum(lodamtall)
      

  2.   

    --方法1(充值次为3,其它次数类似)
    SELECT *
      FROM cz a
     WHERE 3 = (SELECT COUNT(*) FROM cz b WHERE b.cardno = a.cardno);--方法2(充值次为3)
    SELECT cardno, times, loddate, lodamt
      FROM (SELECT cz.*, COUNT(*) over(PARTITION BY cardno) cnt FROM cz)
     WHERE cnt = 3;--总数
    SELECT cardno,count(*) times ,sum(lodamtall) FROM cz group by cardno;