我正在尝试通过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.等等剩下的所有栏目......
你能帮我找一个快速的方法吗?
答案 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