计算账龄代码
来源:互联网 发布:潜25和潜39 淘宝哪个店 编辑:程序博客网 时间:2024/06/10 03:06
--测试数据---if object_id('qfhz') is not null drop table qfhzgocreate table qfhz([统计日期] datetime, [客户代码] varchar(8), [当日发生欠费金额] int,--当天交易产生的欠费 [当日收回欠费金额] int,--当天交易收回的欠费 [欠费余额] int--截止到当日结束的总欠费金额 [历史总欠费]-[历史总收回])insert into qfhz --这张表的记录日期是连续的,下面简单的把有欠费变化的给出,其他的为 日期,客户,0,0,欠费余额 的格式select '2010-01-01','95010101',1000,0,1000 union allselect '2010-01-02','95010101',500,0,1500 union allselect '2010-01-03','95010101',800,1500,800 union allselect '2010-01-04','95010101',200,0,1000 union allselect '2010-01-05','95010101',700,0,1700 union allselect '2010-01-06','95010101',0,800,900 union allselect '2010-01-07','95010101',900,0,1800 union allselect '2010-01-08','95010101',300,500,1600 union allselect '2010-01-09','95010101',400,0,2000 union allselect '2010-01-10','95010101',400,0,2400 union allselect '2010-01-11','95010101',0,2400,0go if object_id('zl') is not null drop table zlgocreate table zl([id] int, [最小日期] int, [最大日期] int )insert into zlselect 1,1,2 union all --表示的范围段 2天内select 2,3,5 union all --3到5天select 3,6,8 union all --6到8天 select 4,9,10 union all --9到10天select 5,11,360 --10天以上go--希望用上面两张表生成下面这张表,每天执行一次能生成本天的记录即可if object_id('zlqf') is not null drop table zlqfgocreate table zlqf([统计日期] datetime, [客户代码] varchar(8), [账龄代码] int, [欠费余额] int)CREATE TABLE #tmp( [ID] INT, [统计日期] DATETIME, [客户代码] VARCHAR(8), [当日发生欠费金额] INT, --当天交易产生的欠费 [当日收回欠费金额] INT, --当天交易收回的欠费 [欠费余额] INT--截止到当日结束的总欠费金额 [历史总欠费]-[历史总收回])CREATE TABLE #tmpqf( [统计日期] DateTIME, [客户代码] VARCHAR(8), [账龄代码] INT, [欠费余额] INT, [ID] INT)INSERT INTO #TMPSELECT ROW_NUMBER() OVER(ORDER BY 统计日期), *FROM qfhzDECLARE @CurrentDate DATETIME, @i INT, @j INT, @hk INT, @StartDate DATETIME, @Chae INT, @ZL INT, @JK INT SET @CurrentDate = '2010-01-01'WHILE (@CurrentDate <= '2010-01-11')BEGIN SET @I = 0 SET @J = 0 SELECT @i = id, @hk = [当日收回欠费金额] FROM #tmp WHERE [统计日期] = @CurrentDate INSERT INTO #TMPQF SELECT [统计日期],[客户代码],[账龄代码],[欠费余额],@i+1 FROM #TMPQF A WHERE ID=@i-1 UNION ALL SELECT @CurrentDate,[客户代码],1,[当日发生欠费金额],@i+1 FROM #tmp WHERE ID = @i SELECT @StartDate=MIN([统计日期]) FROM #TMPQF A WHERE ID=@I-1 AND EXISTS (SELECT 1 FROM (SELECT SUM([欠费余额]) AS 'SumMoney' FROM #tmpqf B WHERE B.ID=@I-1 AND B.[统计日期]<=A.[统计日期] GROUP BY [客户代码])a WHERE A.SumMoney>=@hk ) if(@StartDate is not null) begin INSERT INTO #TMPQF SELECT @StartDate,a.[客户代码],a.[账龄代码],b.Money,@i from #tmpqf a ,( SELECT SUM([欠费余额])-@hk as 'Money' FROM #tmpqf a WHERE id=@i+1 AND a.[统计日期]<=@StartDate group by [客户代码]) b WHERE a.id=@i+1 AND a.[统计日期]=@StartDate UNION ALL SELECT [统计日期],[客户代码],[账龄代码],[欠费余额],@i FROM #TMPQF A WHERE ID=@i+1 and a.[统计日期]>@StartDate DELETE FROM #tmpqf WHERE [欠费余额] = 0 or ID=@i+1 INSERT INTO zlqf SELECT @CurrentDate, [客户代码], b.id, [欠费余额] FROM #tmpqf a, zl b WHERE a.ID = @i AND b.最小日期 <=DATEDIFF(day,A.统计日期,dateadd(day,1,@CurrentDate)) AND b.最大日期 >= DATEDIFF(day,A.统计日期,dateadd(day,1,@CurrentDate)) end else BEGIN INSERT INTO #TMPQF SELECT @CurrentDate,a.[客户代码],a.[账龄代码],b.Money,@i from #tmpqf a ,( SELECT SUM([欠费余额])-@hk as 'Money' FROM #tmpqf a WHERE id=@i+1 AND a.[统计日期]<=@CurrentDate group by [客户代码]) b WHERE a.id=@i+1 AND a.[统计日期]=@CurrentDate DELETE FROM #tmpqf WHERE [欠费余额] = 0 or ID=@i+1 INSERT INTO zlqf SELECT @CurrentDate, [客户代码], b.id, [欠费余额] FROM #tmpqf a, zl b WHERE a.ID = @i AND b.最小日期 <=DATEDIFF(day,A.统计日期,dateadd(day,1,@CurrentDate)) AND b.最大日期 >= DATEDIFF(day,A.统计日期,dateadd(day,1,@CurrentDate)) end SET @CurrentDate = DATEADD(DAY, 1, @CurrentDate)END SELECT [统计日期],[客户代码],[账龄代码],sum([欠费余额]) FROM zlqf GROUP BY [统计日期],[客户代码],[账龄代码] ORDER BY [统计日期],[客户代码],[账龄代码]descDELETE FROM #tmpDELETE FROM #tmpqf 统计日期 客户代码 账龄代码 ----------------------- -------- ----------- -----------2010-01-01 00:00:00.000 95010101 1 10002010-01-02 00:00:00.000 95010101 1 15002010-01-03 00:00:00.000 95010101 1 8002010-01-04 00:00:00.000 95010101 1 10002010-01-05 00:00:00.000 95010101 2 8002010-01-05 00:00:00.000 95010101 1 9002010-01-06 00:00:00.000 95010101 2 2002010-01-06 00:00:00.000 95010101 1 7002010-01-07 00:00:00.000 95010101 2 9002010-01-07 00:00:00.000 95010101 1 9002010-01-08 00:00:00.000 95010101 2 4002010-01-08 00:00:00.000 95010101 1 12002010-01-09 00:00:00.000 95010101 2 13002010-01-09 00:00:00.000 95010101 1 7002010-01-10 00:00:00.000 95010101 3 4002010-01-10 00:00:00.000 95010101 2 12002010-01-10 00:00:00.000 95010101 1 800(17 行受影响)
- 计算账龄代码
- 使用ABAP指针来计算账龄
- 恋人之间如何算账
- 极简版算账软件
- eclipse中统计代码行数
- eclipse中统计代码行数
- 2010级计本代码
- Eclipse中统计代码行数
- VS2008中统计代码行数
- VS中统计代码量
- Swift中统计代码行数
- git中统计代码行数
- 好朋友好算账 隐私权政策
- 算账的学问(转)
- 计组设计实验代码(一)
- 提高php代码质量 36计
- 提高php代码质量 36计(上)
- 提高php代码质量 36计(下)
- 关于 HTML5 的延伸阅读:
- 霍夫线性变换
- 霍夫圆变换
- .docx文件用什么打开
- 迅雷因版权问题不能访问
- 计算账龄代码
- Ext scope使用讲解
- tomcat6.0+CGI详细配置及实例
- JS操纵cookie
- linux系统root用户密码破解
- Dom4J+XPath
- DOM4J+Xpath
- DWR框架入门
- web.xml常用元素