某個需求需要對某一列的值做乘法,網上搜了把確實還真沒有直接的聚合函數用于將某一列的值乘起來。
找到了替代的算法:
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 #TSELECT 1 AS A INTO #TUNION ALL SELECT 2UNION ALL SELECT 3UNION ALL SELECT 4UNION ALL SELECT 0UNION ALL SELECT -1UNION ALL SELECT -2UNION ALL SELECT -3UNION ALL SELECT -4UNION 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 #TWHERE A > 0--等于0的值(相加即可)select @eZero = isnull(sum(A),1)FROM #TWHERE A = 0--小于0的值select @lZero = ISNULL(POWER(10.0,SUM(LOG10(A*-1))),1)*power(-1,(count(1)))FROM #TWHERE A < 0--三個結果相乘select @oZero * @eZero * @lZero as result
新聞熱點
疑難解答