Sql 如何从表达式列更新“金额”列
这就是我的问题:如何将Sql 如何从表达式列更新“金额”列,sql,sql-server,sql-server-2012,expression,Sql,Sql Server,Sql Server 2012,Expression,这就是我的问题:如何将金额列从级别1更新到级别6 id Code amount formula level ----------------------------------------------- 1 A10 0.00 A07 5 2 A02 0.00 (A01+A04)*A05 2 3 A03 0.00 A02+A04 3 4 A
金额
列从级别1更新到级别6
id Code amount formula level
-----------------------------------------------
1 A10 0.00 A07 5
2 A02 0.00 (A01+A04)*A05 2
3 A03 0.00 A02+A04 3
4 A04 40.00 1
5 A05 50.00 1
6 A06 0.00 A03+A01 4
7 A0 0.00 A04+A07+A10+A01+A02+A03 6
8 A01 20.00 1
9 A07 0.00 (A03) 4
10 A08 0.00 (A01) 2
我可能做了很多假设,这些假设对于你的目的来说不够通用,更不用说这是完全未经测试的。但也许这是你实验的起点
declare @id int;
declare @level int = 2;
declare @code varchar(8);
declare @amt decimal(10, 2)
while @level <= (select max(id) from T)
begin
set @id = 1;
while @id <= (select max(id) from T)
begin
set @code = null; set @amount = null;
select @code = Code, @amount = amount from T where id = @id and level = @level - 1;
if @code is not null update T set formula = replace(formula, @code, '(' + cast(amount as varchar(16)) + ')'
set @id = @id + 1;
end
set @level = @level + 1;
end
set @id = 1;
while @d <= (select max(id) from T)
begin
-- use dynamic sql to evaluate each of the expression (assuming they're valid)
declare @sql nvarchar(max) = N'declare @f decimal(10, 2); select @f = ' +
(select formula from T where id = @id);
sp_executesql @sql, 'decimal(10, 2)', @amt output;
update T set amount = @amt where id = @id;
set @id = @id + 1;
end
声明@id int;
声明@levelint=2;
声明@code varchar(8);
声明金额小数(10,2)
而@level您使用的是什么系统?这是一个数据库表吗?excle表?我使用的是sql server 2012,它是一个数据库表。您到底想做什么?请给出例子前->后。我有所有级别1的数量:A01=20,A04=40,A05=50,我有A02有级别2,公式A02=(A01+A04)*A05,所以A02的数量必须是3000。请使用编辑按钮并在问题本身中添加详细信息。请不要使用注释添加其他详细信息谢谢回答!我和你一样做过,但是有一千多张唱片,这不是一个好办法