[英]Oracle SQL Update a column based on another table but based on a date
学习SQL,请原谅我。
我有一个表,该表包含许多帐户(和子帐户),而另一个表则包含许多订单,它们是从不同数据库中获取的自定义表。
我要执行的操作是使用订单表中的order_val值更新帐户表上的order_amt,但是如果该帐户有多个订单,我希望仅从最早的订单日期起订购金额。
帐户表
Acc _Num..........Comp_Name.......Order_Amt.......Int_Id
123456789-1.....ABC Ltd.......................................123456789
123456789-2.....ABC Ltd.......................................123456789
987654321-1.....Xyz Ltd.........................................987654321
987654321-2.....Xyz Ltd.........................................987654321
订单表
Order_Num.....Order_Dt.....Order_Val.....Acc_num
1......................01/01/13......£20.00...........123456789
2......................01/01/14......£10.00...........123456789
3......................01/01/10......£100.00..........987654321
4......................01/01/11......£200.00..........987654321
因此,帐户123456789-1和2的order_amt =£20.00,而来自987654321-1&2的order_amt为£100.00。
UPDATE accounts a
SET a.order_amt =
(
SELECT order_val
FROM orders o
WHERE a.int_id = o.acc_num
AND EXISTS
(
SELECT MIN(order_dt)
FROM orders oa
WHERE o.order_num = oa.order_num
);
我收到一些错误,包括返回多行的错误? 谁能帮我吗?
亲切的问候
伊甸园
我认为您需要这样的东西:
UPDATE accounts a
SET a.order_amt =
(
SELECT order_val
FROM orders o
WHERE a.int_id = o.acc_num
GROUP BY order_val
HAVING order_dt = MIN(order_dt);
);
在订单表内的account_number
列上创建FK ,并使其引用accounts
表的auto-increment account id
。
然后,如Roger所建议的那样,对int_id列稍加修改,并对HAVING
子句进行修改
UPDATE accounts a
SET a.order_amount =
(
SELECT order_value
FROM orders o
WHERE a.account_number = o.account_number
GROUP BY order_value
HAVING MIN(order_date)
)
尽管由于有多个订单附加了相同的帐户ID,但这不能解决返回多行的错误。 您将需要更具体地了解您的需求。 您是否希望所有订单金额的平均值等于帐户表中的订单金额? 还是最大/最小值?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.