0

我有 15 列、12 列(1 月、2 月、3 月、...、12 月)的表来填充我的表,我应该知道要更新的列。

因为更新查询取决于用户条目,如果他输入 1 我应该更新一月等...

我想知道是否可以这样做?

我有 3 个查询:

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

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

谢谢

4

2 回答 2

1

你所拥有的是一个糟糕的数据库设计。最好的办法是将这些列标准化为一个列,并附加一个列来指示月份。

但是,您可以控制使用 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
  ...
于 2013-05-20T10:19:15.370 回答
0

在这个澄清之后

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

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

那么您可以使用以下更新语句来相应地更新您的表 -

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
于 2013-05-20T10:21:55.527 回答