需要创建一个sql视图来计算佣金&运输费用。运费按订单ID级别收取,我需要在订单商品ID级别计算成本。请查看附件中的图片。请注意,运费是订单ID级别。而不是订单商品ID级别。对于运费行,订单商品ID列为空白。
为小提琴创建表格代码
CREATE TABLE IF NOT EXISTS `test`.`T` (`order_id` varchar(19),
`order_item_id` varchar(14), `type` varchar(17), `description`
varchar(16), `amount` int(3)) DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
INSERT INTO `test`.`T` (`order_id`, `order_item_id`, `type`,
`description`, `amount`) VALUES ('171-7045714-5715521', '51516304093723', 'ItemPrice', 'Principal', 200),
('171-7045714-5715521', '51516304093723', 'ItemFees', 'Commission', -16),
('171-7045714-5715521', '17035541556323', 'ItemPrice', 'Principal', 450),
('171-7045714-5715521', '17035541556323', 'ItemFees', 'Commission', -36),
('171-7045714-5715521', '', 'other-transaction', 'Shipping Charges', -55);
答案 0 :(得分:0)
尝试此查询
SELECT T.order_id,
T.order_item_id,
total
+ COALESCE((SELECT SUM(amount) FROM Orders_Detail AS OD
WHERE OD.order_id = T.order_id
AND type = 'other_transaction'), 0)
/
COALESCE((SELECT COUNT(*) FROM Orders_Detail AS OD
WHERE OD.order_id = T.order_id
AND type = 'ItemPrice'), 1)
FROM
(SELECT OD.order_id,
OD.order_item_id,
SUM(amount) total
FROM Orders_Detail AS OD
WHERE OD.order_item_id IS NOT NULL
GROUP BY OD.order_id,
OD.order_item_id) AS T
答案 1 :(得分:0)
SQL语法可能会被供应商更改,但以下内容应该适用于其他版本的MS SQL SERVER次要变体,主要使用COALSCE的不同函数:
CREATE VIEW myView as
SELECT main.order_id, main.order_item_id, COALESCE(P.a,0) + COALESCE(C.a,0) - (COALESCE(S.a,0) / main.c) AS price
FROM
(((SELECT order_id, order_item_id, count(*) as c FROM orderTable GROUP BY order_id, order_item_id) main LEFT OUTER JOIN
(SELECT amount AS a FROM orderTable WHERE description='Principal') P ON main.order_id =P.order_id AND main.order_item_id = P.order_item_id) LEFT OUTER JOIN
(SELECT amount AS a FROM orderTable WHERE description='Commission') C ON main.order_id=C.order_id AND main.order_item_id = C.order_item_id) LEFT OUTER JOIN (SELECT amount AS a FROM orderTable WHERE description='Shipping Charges') S ON main.order_id=S.order_id AND main.order_item_id = S.order_item_id