2017-06-29 70 views
2

更新一列兩個值有是,如筆記本電腦,臺式機,電話,手機,電視和其描述的產品清單表如何在同一時間

STOCK_ITEM (id number (2), 
      item varchar2 (20), 
      purchase_date date, 
      quantity number (2)) 

現在我們必須編寫一個更新查詢,該更新查詢將筆記本電腦更新到桌面和臺式機到筆記本電腦。

我該如何實現這個目標?

以下是樣本數據:

insert into stock_item values (1,'laptop','01/17',4); 
insert into stock_item values (2,'desktop','02/17',3); 
insert into stock_item values (3,'laptop','03/17',2); 
insert into stock_item values (4,'tv','11/17',6); 
insert into stock_item values (5,'fridge','07/17',5); 
insert into stock_item values (6,'desktop','05/17',9); 

所以,我們需要更新桌面項目列值,以筆記本電腦和筆記本電腦的桌面。

+1

到目前爲止您嘗試過什麼?提示:您可能需要一個案例表達式。 – Boneist

+0

請** [編輯] **您的問題,並根據該數據添加一些示例數據和預期輸出。 [**格式化文本**](http://stackoverflow.com/help/formatting)請,[**沒有屏幕截圖**](http://meta.stackoverflow.com/questions/285551/why-may -i-不上傳圖像-的代碼上那麼當灰化-A-問題/ 285557#285557)。 ** [**]您的問題 - 請勿**在論壇中發佈代碼或其他信息。 –

+0

坦率地說,我已經嘗試了正常的更新查詢,這顯然不在這裏工作...... @boneist在哪裏應該更新....在哪裏使用大小寫? –

回答

3

我會寫的更新語句是這樣的:

​​

這樣的話,你只更新需要改變的行,CASE表達式是意圖比解碼更清晰,更易於閱讀和維護。

我已經使用較低的功能來確保所有筆記本電腦或臺式機(不論是哪種情況,例如LAPTOP,LaPtOp,Laptop等)的項目都會被更新。

+0

非常感謝骨子。我還有一張相同的桌子。由於空間限制,用戶已將有限的條目放在表格中。例如,如果我們看到id = 1的第一行,01/17月份的筆記本電腦數量= 4,則其下一個條目位於第三行,id = 3且數量= 2,即從01/17至03/17庫存數量僅爲4個。因此,我們需要編寫一個查詢,以獲取4的正確結果,當date = 02/17 –

+1

您應該將其作爲一個單獨的問題提出。一種方法是使用lead()分析函數生成結束日期,然後在查詢中使用它。如果你不熟悉分析功能,那裏有大量的信息;我強烈建議你谷歌它,並在提出一個新的問題在這裏之前制定出你的選擇聲明。 – Boneist

+0

@KhushbooMantri - 骨科醫生說,這是一個不同的,不相關的問題,應該單獨發佈。但是,我沒有看到問題所在:在WHERE條件中,篩選日期<= <日期輸入>然後求和的行。你不應該爲基本的東西需要一個SO問題。 – mathguy

3

它正與1個更新解碼值:

update STOCK_ITEM set ITEM=decode(ITEM,'laptop', 'desktop','desktop', 'laptop', ITEM); 

後更新的筆記本電腦記錄將與桌面和對面來代替。

+2

'laptop'和'desktop'是數據值不是列名 – APC

+0

相應的固定解決方案 – user7294900

+0

更新解決方案應該工作 – user7294900