2013-03-11 10 views
0

Я имею таблицу SQL со следующими данными выборки:Обновления в 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  

Я хочу, чтобы выполнить запрос обновления, который будет назначать уникальное значение в столбец test_id на основе различных имен стратегии, symbol_name, test_interval, P1, P2, P3. Таким образом, test_id для всех вышеперечисленных строк будет уникальным, за исключением строк 4 и 5, потому что они имеют одинаковые значения, за исключением test_start_date и test_end_date, поэтому они будут иметь одинаковый test_id.

Как это сделать, можете ли вы просто запустить запрос на обновление или хранимую процедуру для автоматического увеличения значения идентификатора теста?

ответ

0

Я использовал для создания идентификаторов, используя ROW_NUMBER(). Я не знаю, является ли это самым простым способом заполнения идентификаторов в вашем случае, но он должен работать.

Он может работать с одним обновлением без временной таблицы, но иногда мне легче разделить операции на более мелкие шаги.

Создать временную таблицу с идентификаторами

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 

Заполните идентификаторы

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) 
+0

прекрасно работает, спасибо много людей. – Ash

+0

Не забудьте принять ответ. –

+0

как я могу принять ответ? – Ash