=================================版权声明=================================

版权声明:原创文章 谢绝转载 

请通过右侧公告中的“联系邮箱(wlsandwho@foxmail.com)”联系我

勿用于学术性引用。

勿用于商业出版、商业印刷、商业引用以及其他商业用途。                

本文不定期修正完善。

本文链接:http://www.cnblogs.com/wlsandwho/p/4968075.html

耻辱墙:http://www.cnblogs.com/wlsandwho/p/4206472.html

=======================================================================

话不多说 先上问题

鄙视垃圾爬虫网站 祝你们早生极乐

=======================================================================

乍看群友的叙述,是要想很多事情的,大概两分钟(虚词)后,就可以分析出

余额'=余额+借方-贷方

然而关键的一点是,1+0=1,1-0=1。此为小学知识。意思是加减零对运算结果不影响。

所以问题中需要进行判断的地方只有“方向”列。而“方向”列的计算依据是余额,所以只要先专心致志的求解出“余额”列就行了。

(此处省略了群友自己给出的分析,没有为什么。经常在群里回答问题的人都知道这其中的厉害。)

=======================================================================

承蒙园友ahdung在上一篇博文(传送门)里不吝赐教,此处王林森尝试着使用CTE的递归进行问题求解。

=======================================================================

下面贴上王林森的代码(附带测试数据)

 -----------------------------------------------------------
--网络代码有风险
--复制粘贴须谨慎
--wls 20151116
USE tempdb
GO IF OBJECT_ID (N't_DCRbyWLS', N'U') IS NOT NULL
DROP TABLE t_DCRbyWLS;
GO CREATE TABLE t_DCRbyWLS(Debtor REAL,Creditor REAL,Direction NVARCHAR(1),Remainder REAL)
GO INSERT INTO t_DCRbyWLS(Direction,Remainder) VALUES ('借',84.9000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (3000.000,0.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,800.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,2284.9000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (1144.0000,0.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,1144.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (5000.0000,0.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,5000.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (436.0000,0.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,436.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,4000.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (5000.0000,0.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,960.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,800.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (800.0000,0.0000)
INSERT INTO t_DCRbyWLS(Debtor,Creditor) VALUES (0.0000,40.0000)
GO SELECT * FROM t_DCRbyWLS
GO WITH TempDCR
AS
(SELECT ROW_NUMBER() OVER(ORDER BY (SELECT 1)) AS 'ID' ,Debtor,Creditor,Direction,Remainder FROM t_DCRbyWLS)
,
TempReCursion
AS
(
SELECT TOP 1 ID, Debtor,Creditor,Remainder,Direction FROM TempDCR
UNION ALL
SELECT a.ID,a.Debtor,a.Creditor,b.Remainder+a.Debtor-a.Creditor,Direction=CASE WHEN b.Remainder+a.Debtor-a.Creditor>=0 THEN N'借' ELSE N'贷' END
FROM TempDCR a JOIN TempReCursion b ON a.ID=b.ID+1
)
SELECT Debtor,Creditor,Direction,Remainder FROM TempReCursion

鄙视垃圾爬虫网站 祝你们早生极乐

运行结果如下:

鄙视垃圾爬虫网站 祝你们早生极乐

作为一只C++,我做SQL的宗旨是“不求高效,但求能跑”。

下面附上执行计划:

鄙视垃圾爬虫网站 祝你们早生极乐

=======================================================================

(友情支持请扫描这个)

微信扫描上方二维码捐赠

SQL Server 2008 R2——用CTE进行递归计算求解累计值的更多相关文章

  1. 利用SQL Server 2008 R2创建自动备份计划

    本文主要利用SQL Server 2008 R2自带的"维护计划"创建一个自动备份数据的任务. 首先,启动 Sql Management studio,确保"SQL Se ...

  2. Microsoft SQL Server 2008 R2 安装卸载

    问题 问题1 标题: Microsoft SQL Server 2008 R2 安装程序 ------------------------------ 出现以下错误: Could not open k ...

  3. SQL Server 2000向SQL Server 2008 R2推送数据

    [文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...

  4. SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了

    一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder, ...

  5. SQL Server 2008 R2的发布订阅配置实践

    纸上得来终觉浅,绝知此事要躬行.搞技术尤其如此,看别人配置SQL SERVER的复制,发布-订阅.镜像.日志传送者方面的文章,感觉挺简单,好像轻轻松松的,但是当你自己去实践的时候,你会发现还真不是那么 ...

  6. SQL Server 2008 R2 Service Pack 3 已经发布

    微软SQL Server Product Team在9月26号官方博客宣布,Microsoft SQL Server 2008 R2 Service Pack 3 (SP3)正式发布了 .具体信息可以 ...

  7. SQL Server 2008 R2——使用计算列为表创建自定义的自增列

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  8. 更改计算机名称后 导致 sql server 2008 R2 用windows账户不能附加的错误解决办法

    出错背景:本人想用sql server 2008 R2 附加sql server 2005数据库出现拒绝访问,后查询网站得知,要用windows身份验证方式登录进去附加, 然后我就用windows身份 ...

  9. Microsoft SQL Server 2008 R2官方中文版(SQL2008下载).rar

    Microsoft SQL Server 2008 R2官方中文版(SQL2008下载).rar

随机推荐

  1. TreeView控件使用

    treeView1.SelectedNode = treeView1.Nodes[0];  //选中当前treeview控件的根节点为当前节点添加子节点:  TreeNode tmp; tmp = n ...

  2. AppCan学习笔记----关闭页面listview动态加载数据

    AppCan页面关闭 AppCan 的页面是由两个HTML组成,如果要完全关闭的话需要在主HTML eg.index.html中关闭,关闭方法:appcan.window.close(-1); 管道 ...

  3. springmvc4环境简单搭建和定时任务

    之前复制粘贴创建了几个ssm的项目,然而回头让自己写的时候还是一头雾水,究其原因是spring的陌生.仅仅是写过几个helloworld而已.而且是照着写.我都不知道springmvc到底需要多少ja ...

  4. 一个基于mysql构建的队列表

    通常大家都会使用redis作为应用的任务队列表,redis的List结构,在一段进行任务的插入,在另一端进行任务的提取. 任务的插入 $redis->lPush("key:task:l ...

  5. 《Head First 设计模式》之装饰者模式

    作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5922248.html 模式名称 装饰者模式(Decorator Pattern) 需求 定义咖啡厅中的 ...

  6. WebAPI2使用AutoFac依赖注入完整解决方案。

    WebApi2上进行依赖注入,在百度里能搜到的的完整解决方案的文章少之又少,缺胳膊断腿. 和MVC5依赖注入的不同之处,并且需要注意的地方,标记在注释当中.上Global代码: namespace S ...

  7. html的留言板制作(js)

    这次留言板运用到了最基础的localstorage的本地存储,展现的效果主要有: 1.编写留言2.留言前可以编辑自己的留言昵称.不足之处: 1.未能做出我喜欢的类似于网易的叠楼功能. 2.未能显示评论 ...

  8. ASP.NET MVC 解析模板生成静态页一(RazorEngine)

    简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法 ...

  9. repeater三级嵌套绑定

    <asp:Repeater ID="rpt1" runat="server" onitemdatabound="rpt1_ItemDataBou ...

  10. 如何在IIS添加MIME扩展类型

    在iis7中默认的MIME类型并不包含所有的后缀名文件,像现在比较热门的apk,ipa文件都是需要手动添加的. 那如何在IIS添加MIME类型?步骤如下: 1.打开iis7,选择你要设置网站,打开mi ...