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

本文介绍了计算多个订单的核销金额的全部过程,运行数据库环境: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);

解题思路如下:

先计算出在每个订单之前总共要核销的金额数,然后加上本次将要核销的订单金额,跟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

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

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

结果如下:

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索sql2005
计算核销金额
核销金额、核销金额是什么意思、核销金额 英文、已核销金额、未核销金额,以便于您获取更多的相关知识。

时间: 2024-10-01 11:22:55

如何计算多个订单的核销金额_mssql2005的相关文章

[路演]中银绒业:交货期不一致导致订单零散

全景网9月25日讯 中银绒业(000982,股吧)(000982)澄清公告专项说明会周三下午在全景网举行.财务总监卢婕称,客户在下单前按总订单量议价定价,合同谈定后,根据交货的具体时间逐批下单,由于客户要求的交货期不一致,会出现订单零散且金额较小的情况.(全景网) 点击进入:中银绒业澄清公告专项说明会

用PHP4 和 PostgreSQL 构建一个电子商务应用

电子商务 本文通过一个简单的web 应用,演示了 PHP 和 PostgresSQL 在电子商务中的应用. 不久以前,如果要架构一个严肃的Web应用的话,意味着购买价格不菲的Cold Fusion 许可,以及一个商业的数据库服务程序像Sybase 加上Sun 服务器.幸运的是,这样的日子一去不复返了.随着日渐成熟的免费数据库市场以及Apache 使用者的大量增长,一些替代产品已经具有相当,甚至超过了这些专有软件的能力. 比较好的开放源码软件的一种是 PHP,一个很像Perl 的脚本语言,以及Po

OCP1z0-047 :多表插入

我们来看下面这个例子看一下一个子查询返回的数据行是如何被用来插入多个表中的,好我们来建三个表分别是:small_customers.medium_customers.large_customers.我们想要按照每位消费者所下订单的总金额来将数据分别插入这些表.子查询将每一位消费者的order_total列求和来确定刻消费者的消费金额是小(所有订单的累加金额小于10000).中等(介于10000与99999.99)还是大(大于等于100000),然后按照条件将这些行插入对应的表中. gyj@OCM

常用统计求和SQL语句示例

  SQL语句例一:求某一字段在某一时间段内数量的总和 表名 销售 字段有:编号 金额 统计这个表在某一时间段内金额的总和 select sum(金额) from 表 where 条件 SQL语句例二:SQL读出记录并统计出某一字段的总和 select * ,SUM(字段) from 表名 where 条件 group by 字段 SQL语句例三:SQL语句按每天.每月.每年统计出销售总额 表名: 订单 字段有Ordertime(订单时间),money(金额) 根据订单时间统计每天.每月.每年的

SQLServerDML触发器之AFTER触发器

  根据DML触发器发生的时间.编写触发器所使用的语言,可以分为AFTER触发器.INSTEAD OF触发器和CLR触发器.AFTER触发器在执行INSERT.UPDATE或DELETE语句操作之后.INSTEAD OF触发器和约束之后激发.INSTEAD OF在处理约束前激发,因此可以在INSTEAD OF中使用其他语句来替代激发触发器的INSERT.UPDATE等语句.并且,还可为基于一个或多个基表的视图定义INSTEAD OF触发器,从而扩展视图可支持的更新类型.CLR触发器可以是AFTE

使用php实现快钱支付功能

本项目用zend framework框架实现的modules/default/controllers/IndexController.php IndexController.php 复制代码 代码如下: <?php class IndexController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function inde

SQL过关

引言 做为一个web开发者,不与数据库打交道几乎是不可能的!由此可见,掌握SQL语句对于一个web开发人员来说是多么的重要.下面是我在整理电脑时,找到的资料,觉得还不错就拿出来与大家分享.不废话了,好不好你看了就知道.进入主题,本文的主要内容如下: 问题背景 SQL查询54问? 1.问题背景 本文中的SQL语句都是基于下面几张表的,这也是比较经典的用于数据库教学的数据库例子. (1)/*员工人事表employee */ emp_no char(5) Not null primary key 员工

电商数据分析基础指标体系

电商数据分析基础指标体系 傅志华 傅志华 信息流.物流和资金流三大平台是电子商务的三个最为重要的平台.而电子商务信息系统最核心的能力是大数据能力,包括大数据处理.数据分析和数据挖掘能力.无论是电商平台(如淘宝)还是在电商平台上销售产品的卖家,都需要掌握大数据分析的能力.越成熟的电商平台,越需要以通过大数据能力驱动电子商务运营的精细化,更好的提升运营效果,提升业绩.构建系统的电子商务数据分析指标体系是数据电商精细化运营的重要前提,本文将重点介绍电商数据分析指标体系. 电商数据分析指标体系分为八大类

c++-用C++做个B2c电子商务 ,没有思路,请大神指教!

问题描述 用C++做个B2c电子商务 ,没有思路,请大神指教! 用户注册,用户登录.(编号,账号,密码,姓名,资金,地址) 登录后菜单项:选购商品,查看订单,查看资金,充值,修改账户信息,注销,退出 商家登录,此处商家和系统平台是统一角色,平台自营类似苏宁易购. 登录后菜单项:查看.添加.修改.删除商品(编号,商品名称,商品信息,价格,库存量,规格,颜色,所属商家), 查看订单,查看金额,注销,退出,相应的子菜单里应有返回上一级菜单功能. 选购商品,用户登录后可以直接商品进行购买下单. 记录订单