更新表格单元格直到达到预定义的总计

时间:2017-11-07 17:50:04

标签: sql cells updating

我正在尝试通过SQL解决问题......

我们假设这是我的表:

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个当前值中的一个(1并不重要)和另一个2.等等剩下的所有栏目......

你能帮我找一个快速的方法吗?

1 个答案:

答案 0 :(得分: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