Oracle:要更新哪一列?复杂的查询



我有一个表,有15列,12列(一月,二月,三月,…我应该知道要更新的列。

因为更新查询依赖于用户条目,如果他输入1,我应该更新一月,所以…

我想知道这是否可能?

我有三个查询:

  1. 我从许多表格中收集数据来计算一年,一个月一个sens的值(进出口和产品)
  2. 我把结果放在另一个中间表中,只有sens,年,月和值
  3. 第三个查询是用中间表
  4. 更新另一个表

第三个表有(January, February, March,…)列

谢谢

你得到的是一个糟糕的数据库设计。最好的方法是将这些列规范化为一个单独的列,并增加一个列来表示月份。

但是,您可以使用case语句控制要更新的列。

update
  my_table
set
  january_col  = case when column_to_update = 1 then new_value else january_col  end,
  february_col = case when column_to_update = 2 then new_value else february_col end,
  march_col    = case when column_to_update = 3 then new_value else march_col    end,
  ... etc
where
  ...

澄清后

假设我们有一个过程,其中我们在变量p_user_in中获取用户条目,并在参数p_val中获取所需值。

我猜你也提供了主键值的过程(我将一列col1作为表的主键),这个值我们在p_prim_val中得到。

,那么你可以使用下面的update语句来更新你的表——

update table_name 
set  January = case when p_user_in = 1 then p_val else January end,
 February = case when p_user_in = 2 then p_val else February end,
 March = case when p_user_in = 3 then p_val else March end,
 April = case when p_user_in = 4 then p_val else April end,
 May = case when p_user_in = 5 then p_val else May end,
 June = case when p_user_in = 6 then p_val else June end,
 July = case when p_user_in = 7 then p_val else July end,
 August = case when p_user_in = 8 then p_val else August end,
 September = case when p_user_in = 9 then p_val else September end,
 October = case when p_user_in = 10 then p_val else October end,
 November = case when p_user_in = 11 then p_val else November end,
 December = case when p_user_in = 12 then p_val else December end
where col1 = p_prim_val

最新更新