更新 table 个单元格,直到达到预定义的总数

Updating table cells until reaching a predefined total

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

假设这是我的 table:

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。对于所有剩余的列依此类推...

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

我不知道这是否适用于您的情况,但它可以满足您的要求。问题是查询的大小(每列 2 次更新)。 观察。 #teste 是你的 table

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