新しい列を持つ表があり、新しい列に入る値を更新しています。簡単にするために、私は私のテーブル構造と私のクエリを減らしています。以下は、私の出力を見たいと思う方法です。フィールドが同じ値で更新されています
IDNumber NewColumn
1 1
2 1
3 1
4 2
5 2
WITH CTE_Split
AS
(
select
*,ntile(2) over (order by newid()) as Split
from TableA
)
Update a
set NewColumn = a.Split
from CTE_Split a
今、私はこれを行うとき、私は私のテーブルを取得し、私は私が望む出力を得ることを見ることができる選択を行う際に、このような
IDNumber NewColumn
1 1
2 1
3 1
4 1
5 1
は、しかし、今、私はこれを行っているように見えます結果セットを複数のグループに分割する前に、すべてがselect内で機能しますが、今はテーブルを更新する必要があります。私はこの奇妙な結果を得ています。私が間違っていることを誰かが何らかのフィードバックを提供できるかどうかを静かではない。
私は一日の不満の後、私はこのコードとテーブルを私がすでにこのプロセスを行っていた別のものと比較することができました。このテーブルがすべて1に更新された理由は、テーブルを作った人は誰でもこれがビットフラッグであると思ったからだ。実際にはint型でなければなりません。なぜなら、この場合は実際には2つの可能な値だけですが、それ以外の場合は2つ以上になる可能性があるからです。 ご協力いただきありがとうございます.Ntile関数を使用する際に、テーブルのデータ型を範囲指定するように教えてください。
'order by newid()'を 'order by idnumber'に置き換えるとどうなりますか? –
@ ZeRaTuL_jFあなたのコードを実行しようとしましたが、いくつかの結果ではあなたの結果は同じでした。私はこのキーのランダム化が原因で奇妙な組み合わせが作成されると思います。コードの意図は?たぶん、ロジックは他のものかもしれません。 –
あなたはいつも同じ行動をしますか? –