• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >MsSql > 如何计算多个订单的核销金额

如何计算多个订单的核销金额

作者:Boss_he 字体:[增加 减小] 来源:互联网 时间:2017-05-11

Boss_he通过本文主要向大家介绍了淘宝违规含多个订单,app退款多个订单,涉及店铺中多个订单,一个订单多个商品,涉及多个被处置的订单等相关知识,希望本文的分享对您有所帮助

本文介绍了计算多个订单的核销金额的全部过程,运行数据库环境:SQL SERVER 2005,下面跟大家分享一下。

下图是一张订单明细表,现有金额要1700,根据订单单号的顺序依次对订单金额进行核销。

到支付订单6时,支付金额不足,只能支付200,后面订单的核销金额为0。

1.基础数据准备

CREATE TABLE #t 
( id INT ,
dingdan VARCHAR(20),
sale MONEY
) 

INSERT INTO #t VALUES (1,'a',100);
INSERT INTO #t VALUES (2,'b',200);  
INSERT INTO #t VALUES (3,'c',300);  
INSERT INTO #t VALUES (4,'d',400);  
INSERT INTO #t VALUES (5,'e',500);  
INSERT INTO #t VALUES (6,'f',600);  
INSERT INTO #t VALUES (7,'g',700);
INSERT INTO #t VALUES (8,'h',800);
INSERT INTO #t VALUES (9,'i',900);
INSERT INTO #t VALUES (10,'j',1000);
</div>

解题思路如下:

先计算出在每个订单之前总共要核销的金额数,然后加上本次将要核销的订单金额,跟1700比较,

如果总和小于等于1700,那么,这个订单的订单金额可以全部核销,否则,只能核销部分,

即1700-本订单之前的所有订单金额之和。

;WITH  x1
     AS ( SELECT  t1.id ,
            t1.dingdan ,
            t1.sale ,
            ( SELECT  ISNULL(SUM(t2.sale), 0)
             FROM   #t t2
             WHERE   t2.id < t1.id
            ) AS curr_sale_sum--本订单之前的所有订单金额
        FROM   #t t1
       ),/*计算出核销金额*/
    x2
     AS ( SELECT  id ,
            dingdan ,
            sale ,
            CASE WHEN curr_sale_sum + sale <= 1700 THEN sale
               ELSE 1700 - curr_sale_sum
            END AS new_sale
        FROM   x1
       )
   /*核销金额为负数,则变更为0*/
  SELECT id AS 序号,
      dingdan 订单,
      sale 订单金额,
      CASE WHEN new_sale < 0 THEN 0
         ELSE new_sale
      END AS 核销金额
  FROM  x2
</div>

由于不能用分析函数来解题,只好用标量子查询实现相同的效果。当然,提供的数据有一定的局限性,

如果序号不是连续的,直接套用我的SQL无法解决,需要自己生成一个连续的序号。

结果如下:

以上就是关于计算多个订单的核销金额的全部解题思路,希望对大家的学习有所帮助。

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 如何计算多个订单的核销金额

相关文章

  • 2017-05-11SQL SERVER 2008 无法附加数据库的解决方法
  • 2017-05-11SQLServer2005安装提示服务无法启动原因分析及解决
  • 2017-05-11SQL Server 2008 安装SQLDMO.dll的方法
  • 2017-05-11SQLServer 2005数据库连接字符串 连接sql2005必备资料
  • 2017-08-25sql小计
  • 2017-08-28oracle转 SQLServer
  • 2017-08-25SQL Server触发器的使用
  • 2017-05-11SQL2005日志收缩方法
  • 2017-05-11同时安装vs2005团队开发版和sql 2005企业版的方法(downmoon原作)
  • 2017-05-11SQL Server 2005/2008 导入导出数据常见报错解决方法

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • SQL Server 2008 R2安装配置方法图文教程
    • SQL Server数据库管理员(DBA)的工作内容
    • SQL Server 移动系统数据库
    • 安装SqlServer2005时版本变更检查 (警告)
    • SqlServer 2005 T-SQL Query 学习笔记(4)
    • SQL2005 大数据量检索的分页
    • SQLserver2008使用表达式递归查询
    • SQL2005的维护计划无法删除的解决方法
    • 一步一步教你创建SQL 2005计划任务应用图解教程
    • SQL Server 2008 R2 超详细安装图文教程

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有