私の問題はこれに起因します:
スクリプトを少し変更しましたが、次のようになります。
;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を恐れています、私はおそらくこれを二度と使用することはないでしょう。
皆様のご協力に感謝いたします。