これがあなたのケースではうまくいくかどうかわかりませんが、それはあなたが望むことをします。問題はクエリのサイズです(各列に2つの更新)。 obs。 #testeはあなたのテーブルです
declare @max_number_1_per_column int = 3
declare @coun_1 int
--assuming that you need to update all columns with the same rule (max number 1 in each column is 3, in this example)
--assuming name is unique
select @coun_1 = count(*) from #teste where item1 = 1
if (@max_number_1_per_column - @coun_1 > 0)
update #teste
set item1 = 1
where name in (select top(@max_number_1_per_column - @coun_1) name from #teste where item1 = 3)
update #teste
set item1 = 2
where item1 = 3
---other column
select @coun_1 = count(*) from #teste where item2 = 1
if (@max_number_1_per_column - @coun_1 > 0)
update #teste
set item2 = 1
where name in (select top(@max_number_1_per_column - @coun_1) name from #teste where item2 = 3)
update #teste
set item2 = 2
where item2 = 3
---other column
select @coun_1 = count(*) from #teste where item3 = 1
if (@max_number_1_per_column - @coun_1 > 0)
update #teste
set item3 = 1
where name in (select top(@max_number_1_per_column - @coun_1) name from #teste where item3 = 3)
update #teste
set item3 = 2
where item3 = 3
出典
2017-11-07 19:15:21
RMH
ありがとうございました。私は明日の朝にそれをテストします!あなたは更新してください。ありがとう! –
まあ...ありがとうございます!!!!これは本当に私が必要なものです。私はちょうど操作をランダム化する最初の更新の終わりに "NEWID()によって注文"を追加...それは素晴らしい作品!本当にありがとう、私はあなたにビールを借りています! –