TSQL的连乘
某个需求需要对某一列的值做乘法,网上搜了把确实还真没有直接的聚合函数用于将某一列的值乘起来。
找到了替代的算法:
http://jerryyang-wxy.blogspot.com/2012/04/transact-sql.html
http://blog.csdn.net/walkbob/article/details/45508501
------------------------------------------------------------------------------------------------
新问题出现了:如果要做连乘的那一列出现了0的值或者是小于0的值,做LOG运算时会出现
An invalid floating point operation occurred.的错误
下面这个例子用于解决某列的值有小于等于零的值而又要做连乘的TSQL:
--生成测试表 DROP TABLE #T SELECT 1 AS A INTO #T UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 0 UNION ALL SELECT -1 UNION ALL SELECT -2 UNION ALL SELECT -3 UNION ALL SELECT -4 UNION ALL SELECT -5 --定义三个参数,用于分别计算大于0的值,等于0的值,小于0的值的连乘结果 declare @oZero as decimal(12,0) declare @eZero as decimal(12,0) declare @lZero as decimal(12,0) --大于0的值 select @oZero = ISNULL(POWER(10.0,SUM(LOG(A))),1) FROM #T WHERE A > 0 --等于0的值(相加即可) select @eZero = isnull(sum(A),1) FROM #T WHERE A = 0 --小于0的值 select @lZero = ISNULL(POWER(10.0,SUM(LOG10(A*-1))),1)*power(-1,(count(1))) FROM #T WHERE A < 0 --三个结果相乘 select @oZero * @eZero * @lZero as result
标签:
TSQL
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南