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列に一意の値を割り当てる更新クエリを実行したいと思います。したがって、上記のすべての行のtest_idは、test_start_dateとtest_end_dateを除いて同じ値を持ち、したがって同じtest_idを持つため、行4と5を除いて一意になります。

これを行うには、更新クエリまたはストアドプロシージャを実行して、テストID値を自動インクリメントできますか?

4

1 に答える 1

0

以前は を使用して ID を作成してい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 に答える