循环遍历结果集并在SQL中更改其结果

时间:2014-01-23 21:55:22

标签: sql sql-server oracle oracle10g

我是Oracle新手。 任何人都可以建议我如何实现以下场景。

我有一个名为table1的表,ItemID为ItemName。 另一个表库存,ItemInventoryID,ItemDescription

我喜欢在select语句中向table1添加一个临时列“ItemStatus”。

使用ItemID,ItemName,ItemStatus获取最终结果集。

类似这样的事情

select ItemID, ItemName, 'False' as ItemStatus   
from table1;

(我最初希望ItemStatus为假。)

我需要在获得输出之前更新此结果的每一行上的ItemStatus列。 基于以下条件。

  declare temp Number;
  select count(*) INTO temp 
  from Inverntory
  where ItemInventoryID = ItemID    ///How do I get this ItemID for every row?

 IF(temp>0)
 THEN 
 UPDATE table1
 SET ITEMSTATUS = 'True';
 END IF;

如何循环遍历

的结果集
   select ItemInventoryID, ItemName, 'False' as ItemStatus
   from table1;

并根据我的条件更新ItemStatus值,最后得到输出。

先谢谢, 弗兰克

1 个答案:

答案 0 :(得分:0)

假设ItemID是table1中的主键,并且它与Inventory具有一对多的关系:

select a.ItemID
      ,a.ItemName
      ,case when count(b.ItemInventoryID) = 0 then 'False' else 'True' end as ItemStatus 
 from table1         a
 left join Inventory b on(
      b.ItemInventoryID =  a.ItemID
 )
group
   by a.ItemID
     ,a.ItemName;

查询执行左连接,这意味着无论是否与Inventory匹配,仍会返回table1中的行。 CASE构造,执行临时列所做的操作。