更新 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
我正在尝试通过 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