1

私はSQLServer2005を使用しています。70列で約5000行のこのtableAがあります。シミュレーション用に新しいデータ(約200の新しいレコード)を作成したいと思います。70列のうち、3列(TERMID、OUTLET、SNUM)の値のみを変更したいので、残りは残ります。例えば

    TABLEA  
    SNO  COMPANY.......TERMID........OUTLET........SNUM.....  
     1     ABC           PP2          P1-P5         P5  
     1     ABC           PP2          P1-P5         P4  
     2     ABC           PP2          P1-P5         P4  
     1     ABC           PP2          P1-P5         P3  
     3     ABC           PP2          P1-P5         P3  

したがって、すべてのTERMIDをPP2からPP3に変更し、すべてのアウトレットをP1-P5からP6-P8に変更することを除いて、新しいレコードのすべての値を保持したいと思います。SNUMに関しては、すべてのP5がP8になり、P4がP7になり、P3がP6になります。挿入を実行すると、TABLEAは次のようになります。

      TABLEA  
    SNO  COMPANY.......TERMID........OUTLET........SNUM.....  
     1     ABC           PP2          P1-P5         P5  
     1     ABC           PP2          P1-P5         P4  
     2     ABC           PP2          P1-P5         P4  
     1     ABC           PP2          P1-P5         P3  
     3     ABC           PP2          P1-P5         P3  
     1     ABC           PP3          P6-P8         P8  
     1     ABC           PP3          P6-P8         P7  
     2     ABC           PP3          P6-P8         P7  
     1     ABC           PP3          P6-P8         P6  
     3     ABC           PP3          P6-P8         P6  

200行の場合は非常に面倒なので、手動でこれを実行したくありません。これはSQLステートメントを使用して可能ですか?

サブクエリを使用して通常の挿入ステートメントを作成する必要がありますが、INSERT INTO TABLEA(COL1、COL2、....... COL70)VALUE(.....)を作成するのは面倒か、それ以上になると思います。

賢いアイデアはありますか?

4

1 に答える 1

1

回答を読み直したところ、新しいテーブルを作成するのではなく、現在のテーブルにレコードを挿入しようとしていることがわかりました。

どうですか:

SELECT * 
INTO #NewTable 
FROM TABLEA;

UPDATE #NewTable 
SET TERMID = 'PP3', 
    OUTLET= 'P6-P8', 
    SNUM = CASE 
               WHEN SNUM = 'P5' THEN 'P8'
               WHEN SNUM = 'P4' THEN 'P7'
               WHEN SNUM = 'P3' THEN 'P6'
           END;

INSERT INTO TABLEA 
SELECT * 
FROM #NewTable

混乱させて申し訳ありません。

于 2013-01-17T03:50:30.780 に答える