动态拼接SQL计算公式

 1 --模拟数据
 2 IF OBJECT_ID('tempdb..#t')>0 DROP TABLE #t
 3 SELECT * INTO #t
 4 FROM (
 5 SELECT '1' id,2030 g,265 h, 830 k,'g*h+h*k' gs,0 tt
 6 UNION ALL
 7 SELECT '2' id,2030 g,0 h, 0 k,'g*4' gs,0 tt
 8 UNION ALL
 9 SELECT '3' id,2030 g,265 h, 0 k,'(g+h)*2' gs,0 tt
10 UNION ALL
11 SELECT '4' id,2030 g,265 h, 0 k,'(g+h)*2' gs,0 tt)t
12 --原始数据
13 SELECT * FROM #t
14 
15 --变量
16 DECLARE @i int,@n INT
17 DECLARE @gs VARCHAR(50)
18 DECLARE @sql VARCHAR(MAX)
19 
20 --按公式类别分类
21 IF OBJECT_ID('tempdb..#tt')>0 DROP TABLE #tt
22 SELECT ROW_NUMBER()OVER(ORDER BY gs)rowid 
23 ,gs 
24 INTO #tt
25 FROM #t
26 GROUP BY gs
27 
28 --按公式类别遍历
29 SELECT @i=MIN(rowid),@n=MAX(rowid) FROM #tt
30 WHILE(@i<=@n)
31 BEGIN
32 SELECT @gs=gs FROM #tt WHERE rowid=@i
33 SET @sql='update #t set tt='+@gs+' where gs='''+@gs+''''--生成脚本
34 EXEC(@sql)--执行脚本,可以print看效果
35 SET @i=@i+1
36 END
37 --处理后效果
38 SELECT * FROM #t

效果预览:

 

转载于:https://www.cnblogs.com/sp-oh-dear/p/3799517.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值