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。请使用编辑按钮并在问题本身中添加详细信息。请不要使用注释添加其他详细信息谢谢回答!我和你一样做过,但是有一千多张唱片,这不是一个好办法