sql server在表字段里面循环运行公式(运用在计算电商产品规格数量等问题)

以上图为例,提取规格内容为500x3+200存储在数据库表里,当产品数量级大时,可以循环运行下面代码计算规格总数,便于求规格均价的分析场景。

使用SP_EXECUTESQL方法

--1、生成对应字段的计算公式
drop table ##T1
;with x1 as (
	select row_number()over(order by id) ids,id,'select @t='+replace(replace(replace(replace(cc,'ml',''),'g',''),'x','*'),'×','*') sql from (
		select id,title,replace(bb,substring(ctool.dbo.GetRegexMatchGroups(bb,'([\u4e00-\u9fa5]+)',0,100),1,100),'')cc from (
		select *,replace(aa,substring(ctool.dbo.GetRegexMatchGroups(aa,'([\u4e00-\u9fa5]+)',0,100),1,100),'') bb
		from test.dbo.vivian_guige_temp  
		) b 
	) c where cc not like '%[0-9][lk]%'
)
select * into ##T1 from x1
select * from ##T1  --ids便于做循环判断,id是原始数据的唯一标志,便于匹配回原结果表

--2、生成临时表存放循环计算的字段结果
drop table ##T2
create table ##T2(id int,specs int)

declare @id int
declare @a nvarchar(100)
declare @name int
declare @i int
declare @j int
set @j=1
select @i=max(ids) from ##T1 
while @j<=@i  --循环条件,确定需要循环的次数
begin
	select @id=id,@a=sql from ##T1 where ids=@j
	EXEC SP_EXECUTESQL @a, N'@t int output', @name OUTPUT;
	insert into ##T2 values(@id,@name)
	set @j=@j+1
end

运行结果:

1、运行临时表##T1查询的结果

2、循环计算后存储在临时表##T2的结果

备注:可以上网详细了解SP_EXECUTESQL的用法,博主也是试了很多种方式才求出来结果,如果有更好的方法实现可以评论告知一下,感激~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值