记录在论坛中解决的一个SQL问题

标签: SQL 题
12人阅读 评论(0) 收藏 举报
分类:

原题路径:点击打开链接

题目截图如下:

表结构与数据如下:


查询语句效果要求:


研究了下编写了如下SQL(只要调整case when 中的总数即可实现效果):

 select 
    C.id,
   (Case when C.num2>=10 then C.num-(C.num2-10) else C.num end)as num
 from( 
     select
       A.id,
       A.num,
       (select Top(2) SUM(num) from dbo.test B where A.id>=B.id) as num2
     from dbo.test A
     where A.num > 0
  )C

效果图:

      当总数等于10时:

           

      当总数等于20时:

           

 但以上SQL还有一个BUG,当总数等于1时, 效果图如下:

           

继续优化SQL,在以上SQL的基础上再嵌套一层查询用于过滤num<0的列,SQL如下:

select 
* 
from (
   select 
     C.id,
     (Case when C.num2>=1 then C.num-(C.num2-1) else C.num end)as num
   from( 
      select
         A.id,
         A.num,
         (select Top(2) SUM(num) from dbo.test B where A.id>=B.id) as num2
      from dbo.test A
      where A.num > 0
    )C
)D where D.num > 0 

当总数等于1时,效果图:


---此题解到这就算结束了,如果有更好的解法请留言


查看评论

SQL 注入防御在互联网企业中的实践

SQL 注入是一种流行 且危害极大的 web 攻击手法,长期占据 OWASP TOP10 首位。本课程主要讲解 SQL 注入攻击的原理和技术手法,并讲解在互联网企业中如何有效防御。
  • 2017年02月28日 17:26

查询某个编号的批次范围

如何通过下面源表的数据查询得到目标表的数据?源表:  批次  编号 1  1000 1  1001 2  1000 3  1001 4  1000 5  1000 目标表: 编号  起始批次    结...
  • htl258
  • htl258
  • 2009-09-12 12:06:00
  • 773

SQL问答题

SQL问答题表结构:1、 表名:g_cardapply字段(字段名/类型/长度):g_applyno varchar 8;//申请单号(关键字)g_applydate bigint 8;//申请日期g...
  • wentx
  • wentx
  • 2007-10-31 11:58:00
  • 284

PHP面试题(附答案)

1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量(1)中;而链接到当前页面的的前一页面URL记录在预定义变量(2)中 //本页地址,SCRIPT_NAME也可以echo $_S...
  • yinyiniao
  • yinyiniao
  • 2009-11-03 19:48:00
  • 2817

第五套

1.在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在预定义变量( )中;而链接到当前页面的URL记录在预定义变量( )中$_SERVER[‘PHP_SELF’] $_SERVER[‘HT...
  • DarkAngel1228
  • DarkAngel1228
  • 2017-02-07 21:51:11
  • 328

Linux中记录用户信息文件

账号 与所有系统账号,使用者,root相关信息都记录在/etc/passwd文件夹中 个人密码 与个人密码相关的文件记录在/etc/shadow文件夹中 群组 Linux中所有的群组名记录在/e...
  • sdd220
  • sdd220
  • 2017-10-27 10:22:21
  • 111

TCP连接状态详解 http://blog.csdn.net/mei922/article/details/4801858

TCP连接状态详解 标签: tcp服务器编程socket网络 2009-11-12 11:48 14169人阅读 评论(1) 收藏 举报  分类:   TCP/IP与网络...
  • wangyin159
  • wangyin159
  • 2016-03-25 21:49:27
  • 531

Linux下源码编译安装PostgreSQL过程与问题总结

  • 2015年12月26日 21:24
  • 20KB
  • 下载

Form Builder 代码汇编一:表单当前所有记录输出到CSV文件

declare        dirnamevarchar2(300);        s_filenamevarchar2(300);        filternamevarchar2(50...
  • u011115875
  • u011115875
  • 2014-02-24 18:28:51
  • 874

蓝桥杯 取中间的数字 交换

假设a,b,c是3个互不相等的整数。下列代码取出它们中居中的数值,记录在m中。其中的swap()函数可以交换两个变量的值。请完善代码。 if(a>b) swap(&a, &b); if(b...
  • wr132
  • wr132
  • 2015-04-05 10:48:41
  • 479
    个人资料
    持之以恒
    等级:
    访问量: 6万+
    积分: 2600
    排名: 1万+
    最新评论