注册 登录
编程论坛 SQL Server论坛

求高人帮我看看这个怎么解决?

tianxia12 发布于 2014-03-01 10:58, 441 次点击
纳税人名称    纳税人识别号    核定开票限额    实际开票额    申报日期
张三              111111    20000                30000    2014/1/5
张三              111111    20000                15000    2014/2/4
张三              111111    20000                30000    2014/3/3
张三              111111    20000                30000    2014/4/9
张三              111111    20000                30000    2014/5/10
张三              111111    20000                30000    2014/6/10
张三              111111    20000                30000    2014/7/14
张三              111111    20000                30000    2014/8/12
张三              111111    20000                20000    2014/9/11
张三              111111    20000                18000    2014/10/4
张三              111111    20000                15000    2014/11/5
张三              111111    20000                20000    2014/12/6
我想要连续三个月和连续6个月实际开票额大于核定开票限额的纳税人,有1万左右纳税人吧,每户都是12个月的资料,我用的 sql 2012 ,请高人指点如何解决?
2 回复
#2
volte2014-03-03 14:24
使用游标循环;我写个算法,你自己好好研究下,用代码实现;
1,创建临时表存放纳税人名,纳税人标识
2,取实际开票额>核定开票额人次>N(N为连续几个月)的相关纳税人列表
3,申明个计数器iCount
while 取符合条件的纳税人列表
begin
    set iCount = 0
    while 取当前纳税人数据 order by 申报日期
    begin
       if 纳税人数据列表.实际开票额 > 核定开票额
           iCount ++
       else
           set iCount = 0

       if iCount >= N    // 满足连续N个月要求
       begin
           insert into 临时表数据
           Break
       end

       当前纳税人数据.next
    end

    符合条件的纳税人列表.next
end
#3
tlliqi2014-03-04 17:51
以下是引用volte在2014-3-3 14:24:50的发言:

使用游标循环;我写个算法,你自己好好研究下,用代码实现;
1,创建临时表存放纳税人名,纳税人标识
2,取实际开票额>核定开票额人次>N(N为连续几个月)的相关纳税人列表
3,申明个计数器iCount
while 取符合条件的纳税人列表
begin
    set iCount = 0
    while 取当前纳税人数据 order by 申报日期
    begin
       if 纳税人数据列表.实际开票额 > 核定开票额
           iCount ++
       else
           set iCount = 0

       if iCount >= N    // 满足连续N个月要求
       begin
           insert into 临时表数据
           Break
       end

       当前纳税人数据.next
    end

    符合条件的纳税人列表.next
end
很详细
1