-1

私の問題はこれに起因します:

VBA(Excel)とSQL-2行の値の比較(ループ)

スクリプトを少し変更しましたが、次のようになります。

;WITH data AS 
( 
   SELECT a.i, a.M, b.M as NextM, 
   CASE WHEN a.M = 65 AND b.M = 120 THEN 1 ELSE 0 END AS shouldIncreaseQ   
   FROM MyTable a       
   LEFT OUTER JOIN MyTable b      
   ON a.i + 1 = b.i 
), test as
(
   SELECT data.M, data.NextM, 
   (SELECT COUNT(*) + 1 FROM data AS ref 
   WHERE ref.shouldIncreaseQ = 1 AND ref.i <= data.i) as Q FROM data 
)

それでは、テストから*を選択しましょう。こんな感じになります。

M      NextM     Q
65     65        1
65     65        1
65     120       2
120    63        2
65     120       3
120    NULL      3

今..私がしたいのは、Q列(QはNextMに関係する)を取り、それを元のmytableに入れることだけです。

だからこのようなもの:

i     M      Q
1     65     1
2     65     1
3     120    2
4     63     2
5     120    3
6     55     3

それが理にかなっていることを願っています。私はselectintoで遊んでいて、運が悪かったので1日中(文字通り何時間も)挿入することさえありました。(想像できるあらゆる種類の結合を使用)

前もって感謝します。(また、誰かが私のテーブルをより見栄えよくする方法を教えてもらえますか..それを行うためにhtmlを使用しますか?)?

アップデート:

;WITH data AS 
 ( 
   SELECT a.i, a.M, b.M as NextM, 
   CASE WHEN a.M = 65 AND b.M = 120 THEN 1 ELSE 0 END AS shouldIncreaseQ   
   FROM MyTable a       
   LEFT OUTER JOIN MyTable b      
   ON a.i + 1 = b.i 
 ), 
test as
(
   SELECT data.i, data.M, data.NextM, 
   (SELECT COUNT(*) + 1 FROM data AS ref 
   WHERE ref.shouldIncreaseQ = 1 AND ref.i <= data.i) as Q FROM data 
),
final as
(
   select a.i, a.M as zw_step,  b.Q as prodid
   from test a
   left outer join test b
   on a.i - 1 = b.i
)

SELECT final.i, final.zw_step, final.prodid
FROM final

さて..selectステートメントは私が好きな方法です。ただし、コマンドへの挿入では機能しません。(finalをいじくり回さなければならない場合があります)。私は今CTEを恐れています、私はおそらくこれを二度と使用することはないでしょう。

皆様のご協力に感謝いたします。

4

1 に答える 1

1

さて、あなたが探しているものを正しく理解しているかどうかはよくわかりません。しかし、あなたは置き換えたいかもしれません

SELECT final.i, final.zw_step, final.prodid
FROM final;

UPDATE MT
  SET MT.Q = F.prodid
  FROM MyTable AS MT
  INNER JOIN final AS F ON MT.i = F.i AND MT.M = F.zw_step;

Qこれにより、の列の値がの列の値に置き換えられMyTableます。これはあなたがやろうとしていることですか?(「今..私がしたいのはQ列(QはNextMに関係する)を取り、それを私の元のmytableに入れることだけです。」に基づいています)prodidfinal

于 2012-07-18T13:11:21.150 に答える