Sql server 如何分配百分比金额项目
我有一个存储订单的表结构。假设我有一个订单,客户需要3种不同数量的商品,每种商品的单价也不同。 店主对所有商品给予25000折扣,但后来客户来要求从订单中删除一个商品,所以我想获得适用于该商品的折扣金额,以便该商品的折扣金额也可以从订单中调整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
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
预期输出会有帮助。预期输出会有帮助。