原文:在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)

所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路。

sql循环取差值,该怎么写?

http://bbs.csdn.net/topics/390636438?page=1#post-396012416

现在有一组 条件 和 一个 数字(比如是10)

根据条件可以查出若干条数据 ,比如是这么样子的

ID Num NumOut

1   4    0

2   5    0

3   8    0

4   6    0……

按顺序 用每一条记录的 Num减去 数字,够减NumOut赋值为差值,不够减,NumOut赋值与Num相同,再用下一个减剩余数量。

也就是说,以上的数据会被更新为:

ID Num NumOut

1   4    4

2   5    5

3   8    1

4   6    0……

这应该如何用sql语句表达???

按我的想法应该写个循环,判断的,但从来没写过sql的循环,查出的数据又该怎么保存呢?急用,多谢指教了!!!

下面是我的解法:


  1. --drop table tb
  2. create TABLE tb (ID int,Num int,NumOut int)
  3. INSERT into tb
  4. SELECT 1,4,0 UNION ALL
  5. SELECT 2,5,0 UNION ALL
  6. SELECT 3,8,0 UNION ALL
  7. SELECT 4,6,0
  8. go
  9. --你要减的数
  10. declare @num int
  11. set @num = 10
  12. ;with t
  13. as
  14. (
  15. select *,
  16. row_number() over(order by @@servername) as rownum
  17. from tb
  18. ),
  19. tt
  20. as
  21. (
  22. select id,
  23. num,
  24. numout,
  25. (select sum(num) from t t2
  26. where t2.rownum <= t1.rownum) as sum_num
  27. from t t1
  28. )
  29. --更新
  30. update tt
  31. set numout = case when sum_num <= @num
  32. then num
  33. when sum_num > @num and
  34. @num - (sum_num - num) >=0
  35. then @num - (sum_num - num)
  36. else 0
  37. end
  38. --查询
  39. select * from tb
  40. /*
  41. ID Num NumOut
  42. 1 4 4
  43. 2 5 5
  44. 3 8 1
  45. 4 6 0
  46. */

在论坛中出现的比较难的sql问题:32(row_number函数+子查询 sql循环取差值)的更多相关文章

  1. 在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算)

    原文:在论坛中出现的比较难的sql问题:31(row_number函数+子查询 月环比计算) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  2. 在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题)

    原文:在论坛中出现的比较难的sql问题:4(row_number函数+子查询 分组连续编号问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路. 求一查询语句 http: ...

  3. 在论坛中出现的比较难的sql问题:2(row_number函数+子查询)

    原文:在论坛中出现的比较难的sql问题:2(row_number函数+子查询) 2.如何去掉字段内的重复.

  4. 在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题)

    原文:在论坛中出现的比较难的sql问题:46(日期条件出现的奇怪问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

  5. 在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时、分钟计算问题)

    原文:在论坛中出现的比较难的sql问题:45(用户在线登陆时间的小时.分钟计算问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. ...

  6. 在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据)

    原文:在论坛中出现的比较难的sql问题:44(触发器专题 明细表插入数据时调用主表对应的数据) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决 ...

  7. 在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列)

    原文:在论坛中出现的比较难的sql问题:42(动态行转列 考勤时间动态列) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  8. 在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字)

    原文:在论坛中出现的比较难的sql问题:41(循环替换 循环替换关键字) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.

  9. 在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存)

    原文:在论坛中出现的比较难的sql问题:40(子查询 销售和历史库存) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉得有 ...

随机推荐

  1. Problems with Localtime

    http://pytz.sourceforge.net/#problems-with-localtime https://docs.djangoproject.com/en/2.2/topics/i1 ...

  2. Visual Studio 2019更新到16.2.3

    Visual Studio 2019更新到16.2.3   此次更新,包括以下内容: (1)修复找不到Android SDK的bug. (2)修复安装结束后,无法启动的bug. (3)修复关闭VS时, ...

  3. Flutter的运行环境标识

    Flutter的四种运行模式:Debug.Release.Profile和test ,在实际开发中,我们往往需要根据当前运行模式的不同,选择不同的操作,比如在Debug模式启用Log.在生产模式关闭L ...

  4. ISO/IEC 9899:2011 条款6.5.5——乘法操作符

    6.5.5 乘法操作符 语法 1.multiplicative-expression: cast-expression multiplicative-expression    *    cast-e ...

  5. linux系统执行.exe文件

    首先要了解一下Wine: Wine (“Wine Is Not an Emulator” 的首字母缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Linux,Mac OSX 及 ...

  6. 一份 Tomcat 和 JVM 的性能调优经验总结!拿走不谢

    Tomcat性能调优 找到Tomcat根目录下的conf目录,修改server.xml文件的内容.对于这部分的调优,我所了解到的就是无非设置一下Tomcat服务器的最大并发数和Tomcat初始化时创建 ...

  7. 如何发布自定义的UI 组件库到 npmjs.com 并且编写 UI组件说明文档

    记录基于 antd 封装业务组件并发布到npm 上的过程:(TS + React + Sass) 初始化项目: 1.yarn create react-app winyhui --typescript ...

  8. .Net MVC 标签页

    目录 Bootstrap的标签页 适合.Net MVC的标签页 Bootstrap的标签页 下面是Bootstrap的标签页,挺好的,但是用的id,内容是固定的?我不知道怎么变成不同的视图来 < ...

  9. web端自动化——webdriver驱动

    1.1Edge浏览器(不过,Edge浏览器只能运行于 Windows 10) Edge驱动的下载地址,复制链接http://go.microsoft.com/fwlink/?LinkId=619687 ...

  10. 什么时候该用readfile() , fread(), file_get_contents(), fgets()?

    fread() 和 readfile() fread() 最大一次性能读取 8k长度的字节数,所以不能一次性读取大文件去作下载. 优势在于,操作更加灵活,每次读取指定字节的内容,用于下载时方便控制服务 ...