Sql server 如何分配百分比金额项目

Sql server 如何分配百分比金额项目,sql-server,Sql Server,我有一个存储订单的表结构。假设我有一个订单,客户需要3种不同数量的商品,每种商品的单价也不同。 店主对所有商品给予25000折扣,但后来客户来要求从订单中删除一个商品,所以我想获得适用于该商品的折扣金额,以便该商品的折扣金额也可以从订单中调整 CREATE TABLE SALE_MASTER ( ORDER_NUMBER VARCHAR(50) NOT NULL PRIMARY KEY, DISCOUNT_AMOUNT NUMERIC ) INSERT INTO SALE_MASTER VAL

我有一个存储订单的表结构。假设我有一个订单,客户需要3种不同数量的商品,每种商品的单价也不同。 店主对所有商品给予25000折扣,但后来客户来要求从订单中删除一个商品,所以我想获得适用于该商品的折扣金额,以便该商品的折扣金额也可以从订单中调整

CREATE TABLE SALE_MASTER
(
ORDER_NUMBER VARCHAR(50) NOT NULL PRIMARY KEY,
DISCOUNT_AMOUNT NUMERIC
)

INSERT INTO SALE_MASTER VALUES ('SO-100-ORD-19', 25000);

CREATE TABLE SALE_DETAIL
(
ORDER_NUMBER VARCHAR(50),
ITEM_NAME VARCHAR(250),
QUANTITY INT,
PRICE NUMERIC,
CONSTRAINT FK_SALE_MASTER FOREIGN KEY (ORDER_NUMBER)
REFERENCES SALE_MASTER(ORDER_NUMBER)
)
INSERT INTO SALE_DETAIL VALUES ('SO-100-ORD-19', 'Double Bed', 5, 70000);
INSERT INTO SALE_DETAIL VALUES ('SO-100-ORD-19', 'Sofa', 5, 10000);
INSERT INTO SALE_DETAIL VALUES ('SO-100-ORD-19', 'Dining Table', 1, 50000);

SELECT * FROM SALE_MASTER
SELECT ITEM_NAME, QUANTITY, PRICE, (DISCOUNT_AMOUNT/(QUANTITY*PRICE)) FROM SALE_DETAIL, SALE_MASTER
WHERE SALE_DETAIL.ORDER_NUMBER = SALE_MASTER.ORDER_NUMBER

如果我正确理解您的情况,您需要计算一单位货币25000/450 000的折扣,然后进行所有计算:

;
WITH cte AS (
    SELECT 
        SALE_MASTER.ORDER_NUMBER,
        SUM(SALE_DETAIL.QUANTITY * SALE_DETAIL.PRICE) AS TOTAL_AMOUNT,
        SALE_MASTER.DISCOUNT_AMOUNT
    FROM SALE_DETAIL, SALE_MASTER
    WHERE SALE_DETAIL.ORDER_NUMBER = SALE_MASTER.ORDER_NUMBER
    GROUP BY SALE_MASTER.ORDER_NUMBER, SALE_MASTER.DISCOUNT_AMOUNT
)
SELECT 
    SALE_DETAIL.ITEM_NAME, 
    SALE_DETAIL.QUANTITY, 
    SALE_DETAIL.PRICE, 
    (SALE_DETAIL.QUANTITY * SALE_DETAIL.PRICE) * (cte.DISCOUNT_AMOUNT / cte.TOTAL_AMOUNT) AS ITEM_DISCOUNT_FOR_ALL_ITEMS,
    SALE_DETAIL.PRICE * (cte.DISCOUNT_AMOUNT / cte.TOTAL_AMOUNT) AS ITEM_DISCOUNT_FOR_ONE_ITEM
FROM SALE_DETAIL, cte
WHERE SALE_DETAIL.ORDER_NUMBER = cte.ORDER_NUMBER
输出:

ITEM_NAME      QUANTITY PRICE   ITEM_DISCOUNT_FOR_ALL_ITEMS  ITEM_DISCOUNT_FOR_ONE_ITEM
Double Bed     5        70000   19444.444444                 3888.888889
Sofa           5        10000   2777.777778                  555.555556
Dining Table   1        50000   2777.777778                  2777.777778

如果我正确理解您的情况,您需要计算一单位货币25000/450 000的折扣,然后进行所有计算:

;
WITH cte AS (
    SELECT 
        SALE_MASTER.ORDER_NUMBER,
        SUM(SALE_DETAIL.QUANTITY * SALE_DETAIL.PRICE) AS TOTAL_AMOUNT,
        SALE_MASTER.DISCOUNT_AMOUNT
    FROM SALE_DETAIL, SALE_MASTER
    WHERE SALE_DETAIL.ORDER_NUMBER = SALE_MASTER.ORDER_NUMBER
    GROUP BY SALE_MASTER.ORDER_NUMBER, SALE_MASTER.DISCOUNT_AMOUNT
)
SELECT 
    SALE_DETAIL.ITEM_NAME, 
    SALE_DETAIL.QUANTITY, 
    SALE_DETAIL.PRICE, 
    (SALE_DETAIL.QUANTITY * SALE_DETAIL.PRICE) * (cte.DISCOUNT_AMOUNT / cte.TOTAL_AMOUNT) AS ITEM_DISCOUNT_FOR_ALL_ITEMS,
    SALE_DETAIL.PRICE * (cte.DISCOUNT_AMOUNT / cte.TOTAL_AMOUNT) AS ITEM_DISCOUNT_FOR_ONE_ITEM
FROM SALE_DETAIL, cte
WHERE SALE_DETAIL.ORDER_NUMBER = cte.ORDER_NUMBER
输出:

ITEM_NAME      QUANTITY PRICE   ITEM_DISCOUNT_FOR_ALL_ITEMS  ITEM_DISCOUNT_FOR_ONE_ITEM
Double Bed     5        70000   19444.444444                 3888.888889
Sofa           5        10000   2777.777778                  555.555556
Dining Table   1        50000   2777.777778                  2777.777778

预期输出会有帮助。预期输出会有帮助。