2017-06-29 87 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