2017-11-07 59 views
0

に到達するまでのは、これが私のテーブルであるとしましょう:更新テーブルセル...私はSQL経由で質問を解決しようとしている</p> <p>を事前に定義された総

NAME | ITEM1 | ITEM2 | ITEM3             
AAA 1  2  1 
BBB 2  1  3 
CCC  3  2  1 
DDD  3  1  2 
EEE  1  3  1 

は今、1と2が値であり、 3つの値はすべての列で変更する必要があります。この値は、定義された合計に達するまで1に変更する必要があります。それ以外の場合は2に変更する必要があります。

たとえば、ITEM1の列で、値1の3倍が必要であると仮定します。これは、 2つの3つの現在の値のうちの1つ(1つは問題ではありません)と2つの残りの列の残りの列は同じです...

すばやく見つけてくださいこれを行う?

答えて

0

これがあなたのケースではうまくいくかどうかわかりませんが、それはあなたが望むことをします。問題はクエリのサイズです(各列に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 
+0

ありがとうございました。私は明日の朝にそれをテストします!あなたは更新してください。ありがとう! –

+0

まあ...ありがとうございます!!!!これは本当に私が必要なものです。私はちょうど操作をランダム化する最初の更新の終わりに "NEWID()によって注文"を追加...それは素晴らしい作品!本当にありがとう、私はあなたにビールを借りています! –

関連する問題