SQL Server 2008 R2——用CTE进行递归计算求解累计值
=================================版权声明=================================
版权声明:原创文章 谢绝转载
请通过右侧公告中的“联系邮箱(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进行递归计算求解累计值的更多相关文章
- 利用SQL Server 2008 R2创建自动备份计划
本文主要利用SQL Server 2008 R2自带的"维护计划"创建一个自动备份数据的任务. 首先,启动 Sql Management studio,确保"SQL Se ...
- Microsoft SQL Server 2008 R2 安装卸载
问题 问题1 标题: Microsoft SQL Server 2008 R2 安装程序 ------------------------------ 出现以下错误: Could not open k ...
- SQL Server 2000向SQL Server 2008 R2推送数据
[文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...
- SQL Server 2008 R2 升级到 Service Pack 3后Report Builder启动不了
一同事将测试服务器从SQL Server 2008 R2 SP2升级到了SQL Server 2008 R2 SP3后发现Report Service的报表编辑时启动不了Report Builder, ...
- SQL Server 2008 R2的发布订阅配置实践
纸上得来终觉浅,绝知此事要躬行.搞技术尤其如此,看别人配置SQL SERVER的复制,发布-订阅.镜像.日志传送者方面的文章,感觉挺简单,好像轻轻松松的,但是当你自己去实践的时候,你会发现还真不是那么 ...
- SQL Server 2008 R2 Service Pack 3 已经发布
微软SQL Server Product Team在9月26号官方博客宣布,Microsoft SQL Server 2008 R2 Service Pack 3 (SP3)正式发布了 .具体信息可以 ...
- SQL Server 2008 R2——使用计算列为表创建自定义的自增列
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- 更改计算机名称后 导致 sql server 2008 R2 用windows账户不能附加的错误解决办法
出错背景:本人想用sql server 2008 R2 附加sql server 2005数据库出现拒绝访问,后查询网站得知,要用windows身份验证方式登录进去附加, 然后我就用windows身份 ...
- Microsoft SQL Server 2008 R2官方中文版(SQL2008下载).rar
Microsoft SQL Server 2008 R2官方中文版(SQL2008下载).rar
随机推荐
- JSON导出CSV中文乱码解决方案
前言 以往datagrid导出数据全部在后台搞定,现在就想换中思路去解决,正常情况下使用easyui datagrid ajax获取数据源时都是json格式,那么此时需要导出数据时只要把该数据源扔出来 ...
- Asp.Net 使用Npoi导出Excel
引言 使用Npoi导出Excel 服务器可以不装任何office组件,昨天在做一个导出时用到Npoi导出Excel,而且所导Excel也符合规范,打开时不会有任何文件损坏之类的提示.但是在做导入时还是 ...
- 获取当前方法名,行号,类名,所在java文件第几行
public class Demo { public static void main(String[] args) { Demo demo = new Demo(); demo.go(); } pu ...
- APP接口自动化测试JAVA+TestNG(一)之框架环境搭建
前言 好久不曾写点啥,去年换到新公司组测试团队与培养建设花费大量时间与精力,终于架构成型与稳定有时间可以打打酱油了.很久没有总结点啥,提笔想写的内容太多,先放APP接口自动化的内容吧,这个估计大家比较 ...
- 使用签名来保证ASP.NET MVC OR WEBAPI的接口安全
当我们开发一款App的时候,App需要跟后台服务进行通信获取或者提交数据.如果我们没有完善的安全机制则很容易被别用心的人伪造请求而篡改数据. 所以我们需要使用某种安全机制来保证请求的合法.现在最常用的 ...
- 数据库排序sql,order by
一开始我认为 SELECT * FROM dbo.T_User ORDER BY CreateTime ,IsDel DESC 的执行顺序是先按创建时间倒序排序,再按isdel倒序排序,所以我就没再S ...
- 基于Metronic的Bootstrap开发框架经验总结(10)--优化Bootstrap图标管理
在基于Bootstrap开发的项目中,鲜艳颜色的按钮,以及丰富的图表是很吸引人的特点,为了将这个特点发挥到极致,可以利用Bootstrap图标抽取到数据库里面,并在界面中进行管理和使用,这样我们可以把 ...
- C#学习笔记-封装
前言 说起来惭愧,学了大半年的C#,其实最开始就接触到了封装的部分,但是一直模模糊糊的弄不清楚,也觉得没什么影响就没怎么在意,现在才开始认真的看这部分内容,看懂了过后好多东西清晰了不少,才发现封装这个 ...
- 【手记】未能从程序集System.Net.Http.Formatting中加载类型System.Net.Http.Formatting.FormUrlEncodedMediaTypeFormatter
实际报错如图: 如果你跟我一样是在折腾Asp.Net WebApi 2.x时遇到这个问题,请参看如下办法: 删除现有System.Net.Http.Formatting引用(如果引用了的话) 重新引用 ...
- aspx后台传递Json到前台的两种接收方法
第一种:前台接收 dataType: "json", success: function (data) { va ...