我有一个包含以下示例数据的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
我想运行更新查询,该查询将根据distinct strategy_name,symbol_name,test_interval,P1,P2,P3为test_id列分配唯一值。 因此,除了第4行和第5行之外,上面所有行的test_id都是唯一的,因为除了test_start_date和test_end_date之外,它们具有相同的值,因此它们将具有相同的test_id。
如何执行此操作,您是否可以运行更新查询或存储过程来自动增加测试ID值?
答案 0 :(得分:0)
我曾经使用ROW_NUMBER()
创建ID。我不知道这是否是填写案例中最简单的ID的方法,但它应该有用。
它可以在没有临时表的情况下使用单个更新,但有时我发现以较小的步骤拆分操作更容易。
使用ids
创建临时表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
填写ids
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)