根据列中的文本计算结果

appo_li 2021-02-22 03:40:17
--表结构
CREATE TABLE [dbo].#t1(
T DECIMAL(18,2),
L DECIMAL(18,2),
A DECIMAL(18,2),
Q INT,
公式 NVARCHAR(999),
值 DECIMAL(18,2)
)
--数值
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 3200,3840, 3300,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/(L-T) ELSE 0 END' )
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 8,10, 0,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/L ELSE 0 END' )

--实现效果:
根据公式列中写好的公式,计算出值,填写到值这一栏


望给予帮助,谢谢
...全文
110 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
appo_li 2021-03-03
  • 打赏
  • 举报
回复
感谢各位大佬,忘结贴了,谢谢
Hello World, 2021-02-22
  • 打赏
  • 举报
回复
如果公式各类不多的话按不同公式来更新即可:

--表结构	
CREATE TABLE [dbo].#t1
(
    T  DECIMAL(18, 2),
    L  DECIMAL(18, 2),
    A  DECIMAL(18, 2),
    Q  INT,
    公式 NVARCHAR(999),
    值  DECIMAL(18, 2)
);
--数值
INSERT INTO #t1(T,L,A,Q,公式)VALUES( 3200,3840, 3300,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/(L-T) ELSE 0 END' )
INSERT INTO #t1(T,L,A,Q,公式)VALUES(  8,10, 0,5,'CASE WHEN A<=T THEN Q WHEN A<L THEN Q*(L-A)/L ELSE 0 END' )

--变量
DECLARE @i INT, @n INT;
DECLARE @gs VARCHAR(500);
DECLARE @sql VARCHAR(MAX);

--按公式类别分类
SELECT  ROW_NUMBER() OVER (ORDER BY 公式) rowid, 公式 INTO  #tt FROM #t1 GROUP BY   公式;

--按公式类别遍历
SELECT  @i = MIN(rowid), @n = MAX(rowid)FROM #tt;
WHILE (@i <= @n)
    BEGIN
        SELECT  @gs = 公式 FROM   #tt WHERE   rowid = @i;
        SET @sql = 'update #t1 set 值=' + @gs + ' where 公式=''' + @gs + ''''; --生成脚本
        EXEC (@sql); --执行脚本,可以print看效果
        SET @i = @i + 1;
    END;
SELECT  * FROM  #t1;
RINK_1 2021-02-22
  • 打赏
  • 举报
回复
单条的试试下面的,最好有个主键,多条批量处理只能想到循环和游标


DECLARE @SQL VARCHAR(8000)
DECLARE @ID INT

SET @ID=2

;WITH CTE
AS
(SELECT *,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM #T1)


SELECT @SQL='WITH CTE
AS
(SELECT *,ROW_NUMBER() OVER (ORDER BY (SELECT 1)) AS RN FROM #T1)

UPDATE CTE SET 值='+公式+' WHERE RN='+CAST(@ID AS VARCHAR)
FROM CTE WHERE RN=@ID

EXEC(@SQL)
唐诗三百首 2021-02-22
  • 打赏
  • 举报
回复

-- 计算
declare @t decimal(18,2),@l decimal(18,2),@a decimal(18,2),@q int,@gs nvarchar(999),
		@tsql nvarchar(2000)

declare ap scroll cursor for
 select T,L,A,Q,公式 from #t1

open ap
fetch first from ap into @t,@l,@a,@q,@gs
while(@@fetch_status<>-1)
begin
  select @tsql=N'update #t1 set 值='+@gs
              +N' where T='+cast(@t as nvarchar(100))
			  +N' and L='+cast(@l as nvarchar(100))
			  +N' and A='+cast(@a as nvarchar(100))
			  +N' and Q='+cast(@q as nvarchar(100))
  exec(@tsql)

  fetch next from ap into @t,@l,@a,@q,@gs
end
 
close ap
deallocate ap


-- 结果
select * from #t1

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧