0

我有一个包含以下示例数据的 sql 表:

Id Test_Id Strategy_Name Symbol_Name Test_Start_Date Test_End_Date Test_Interval P1 P2 P3

11 0       5x5           ICC         2012-01-01      2012-12-31    Hourly    69 18 2    
12 0       5x5           ICC         2012-01-01      2012-12-31    Hourly    5  25 2    
13 0       5x5           ICC         2012-01-01      2012-12-31    Hourly    6  25 2    
14 0       5x5           ICC         2012-01-01      2012-12-31    Hourly    2  25 2    
15 0       5x5           ICC         2011-01-01      2011-12-31    Hourly    2  25 2    

我想运行一个更新查询,它将根据不同的 strategy_name、symbol_name、test_interval、P1、P2、P3 为 test_id 列分配一个唯一值。因此,除了第 4 行和第 5 行之外,上述所有行的 test_id 都是唯一的,因为除了 test_start_date 和 test_end_date 之外,它们具有相同的值,因此它们将具有相同的 test_id。

如何执行此操作,您可以只运行更新查询或存储过程来自动增加测试 id 值吗?

4

1 回答 1

0

我曾经使用ROW_NUMBER(). 我不知道这是否是在您的情况下填写 id 的最简单方法,但它应该可以工作。

它可以在没有临时表的情况下使用单个更新,但有时我发现以更小的步骤拆分操作更容易。

创建一个带有 id 的临时表

select
    ROW_NUMBER() OVER (order by strategy_name, symbol_name, test_interval, P1, P2, P3 asc) as id,
    strategy_name, symbol_name, test_interval, P1, P2, P3
INTO #ids
FROM [table]
GROUP BY strategy_name, symbol_name, test_interval, P1, P2, P3

填写id

UPDATE [table]
SET test_id = (select id from #ids where 
  [table].strategy_name = #ids.strategy_name, 
  and [table].symbol_name = #ids.symbol_name, 
  and [table].test_interval = #ids.test_interval, 
  and [table].P1 = #ids.P1, 
  and [table].P2 = #ids.P2, 
  and [table].P3 = #ids.P3)
于 2013-03-11T07:10:07.193 回答