国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > SQL Server > 正文

如何計算多個訂單的核銷金額

2020-10-30 19:05:43
字體:
來源:轉載
供稿:網友

本文介紹了計算多個訂單的核銷金額的全部過程,運行數據庫環境: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無法解決,需要自己生成一個連續的序號。

結果如下:

以上就是關于計算多個訂單的核銷金額的全部解題思路,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 六安市| 明星| 扶风县| 潜山县| 灵山县| 离岛区| 云浮市| 榆林市| 湾仔区| 石楼县| 郧西县| 新郑市| 微山县| 睢宁县| 耿马| 东平县| 丰镇市| 特克斯县| 牙克石市| 盐亭县| 和龙市| 玉环县| 马关县| 南召县| 兴宁市| 岚皋县| 昌图县| 永兴县| 房山区| 玉田县| 页游| 城市| 金塔县| 甘德县| 浦县| 武邑县| 蚌埠市| 洪江市| 浪卡子县| 阿尔山市| 阿尔山市|