[英]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.