我尝试根据订单total price
和sub-total
添加tax
披萨订单。我收到一条错误,指出子查询使用此命令返回的值超过1:
DECLARE @orderTotal AS INT
SET @orderTotal = (SELECT(SUM((orderSubtotal+tax) * (1 - discountAmount)))
FROM OrderProcessing GROUP BY orderID)
UPDATE OrderProcessing
SET orderTotalAmount = @orderTotal
discountAmount
等于0.2
之类的十进制数,代表20%
折扣。
答案 0 :(得分:5)
首先,这是错误的方法,除非您希望所有订单在orderTotalAmount
列中具有相同的值。
我想你可能正在寻找这样的东西:
UPDATE OrderProcessing
SET orderTotalAmount = (orderSubtotal + tax) * (1 - discountAmount)
其次,我认为你的第一个查询中有太多括号。
答案 1 :(得分:1)
我认为你不需要一个小组,但它应该像
UPDATE OrderProcessing o
SET orderTotalAmount =
(SELECT(SUM((orderSubtotal + tax) * (1 - discountAmount)))
FROM OrderProcessing
WHERE orderID = o.orderId)
否则,在错误状态下,子查询返回多条记录。
答案 2 :(得分:0)
您实际上可以通过使用某个函数将子查询返回的行限制为1。
MYSQL:
SELECT column_name(s)
FROM table_name
LIMIT number;
甲骨文:
select *
from
( //your query here )
where ROWNUM = 1;
或者:
SELECT column_name(s)
FROM table_name
FETCH FIRST N ROWS;
希望它的帮助:)
答案 3 :(得分:0)
DECLARE @orderTotal INT, @orderID int
SELECT @orderTotal = SUM((orderSubtotal+tax) * (1 - discountAmount))
FROM OrderProcessing
WHERE orderID = @orderID
GROUP BY orderID
UPDATE OrderProcessing
SET orderTotalAmount = @orderTotal
WHERE orderID = @orderID
如果我理解正确,您需要使用唯一值
更新OrderProcessing表中的许多行答案 4 :(得分:0)
原始查询为每个orderID返回一行。 之后,您想要更新orderTotalAmount,但是您没有指定哪个orderID。 显然,您希望以相同的方式更新所有订单。 为此你需要sfrutig方法。 您需要在查询中指定要处理的orderID,然后返回一行。 并在循环中使用它来更新所有订单。
由于我没有足够的分数,我无法将此评论放在sfrutig的解决方案旁边。