某个需求需要对某一列的值做乘法,网上搜了把确实还真没有直接的聚合函数用于将某一列的值乘起来。

找到了替代的算法:

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的连乘的更多相关文章

  1. T-SQL学习记录

    T-sql是对SQL(structure query language )的升级.可以加函数. 系统数据库:master管理数据库.model模版数据库,msdb备份等操作需要用到的数据库,tempd ...

  2. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...

  3. 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)

    索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...

  4. TSQL 分组集(Grouping Sets)

    分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...

  5. T-sql语句查询执行顺序

    前言 数据库的查询执行,毋庸置疑是程序员必备技能之一,然而数据库查询执行的过程绚烂多彩,却是很少被人了解,今天哥哥要带你装逼带你飞,深入一下这sql查询的来龙去脉,为查询的性能优化处理打个基础,或许面 ...

  6. T-SQL 查询XML

    我们经常在SQL Server列中存一些XML来作为配置文件或者是保存特殊信息,那么如何将其展开并查询它或将其呈现为关系数据? 其实在T-SQL 下可以很容易的实现. 示例xml <catalo ...

  7. T-SQL 转义select … like中的特殊字符(百分号)

    众所周知,T-SQL中LIKE运算符使用%符号表示通配符.很多时候可能需要查询包含有%的数据,比如需要查询字段coupon中含有5%的数据.那么如何使用已经有百分号(%)符号的LIKE搜索字符串呢? ...

  8. T-SQL Recipes之Separating elements

    Separating elements Separating elements is a classic T-SQL challenge. It involves a table called Arr ...

  9. T-SQL Recipes之Database Backups

    The Problem 在DBA和T-SQL码奴日常工作中,比如常规检查,服务管理,数据库管理, 是其中最具挑战性的一个领域. 在相似任务中,比如索引碎片管理,统计管理,数据库备份是异常重要的,对任何 ...

  10. T-SQL Recipes之Organizing and Archiving Data

    The Problem 当我们处理存档数据或内存数据时,我们想要自定义命名表名,数据库,架构加上日期,时间,或者应用名时,用标准的TSQL来实现是比较困难的. 假设我们有一张日志表,增长速度异常快.但 ...

随机推荐

  1. python与正则表达式:re模块详解

    re模块是python中处理正在表达式的一个模块 正则表达式知识储备:http://www.cnblogs.com/huamingao/p/6031411.html 1. match(pattern, ...

  2. threadlocal类

    1.threadlocal对象为线程提供变量的副本,该副本为线程私有的,其它线程访问不到: 2.变量的副本存储在ThreadLocalMap对象中: 3.使用threadlocal时候,最好先使用in ...

  3. CSS盒子模型学习记录2

    参考:http://www.blueidea.com/tech/web/2007/4545_2.asp 代码试验: html代码: <!DOCTYPE html PUBLIC "-// ...

  4. oracle net manager的配置文件tnsnames.ora位置

    配置文件所在的路径:C:\app\Ling-PC\product\11.2.0\client_1\network\admin     (红色为安装的盘符位置)

  5. (转)UVM内容梗概

    1. 类: 面向对象基础传统的面向对象编程与systemverilog类的特点,类的定义,成员与方法,构造函数,对象的复制和深/浅拷贝,父类/子类关系,类的继承,作用域的规则,对象的句柄以及赋值,方法 ...

  6. unity3d 射弹基础案例

    小白本来想学cocos2dx的,然而c++难学就算了,cocos2dx对新手来说简直坑爹,于是乎转战unity3d学习js,在写出第一个游戏后兴致高多了哎. 回顾一下编辑的过程:1.建立一个cube作 ...

  7. perl 入门的基础

    perldoc是在搜索手册中查找你要寻找的函数 例如(查找print函数):perldoc -tf print

  8. scala学习:apply方法

    摘抄两段话: 在明确了方法调用的接收者的情况下,若方法只有一个参数时,调用的时候就可以省略点及括号.如 " to ",实际完整调用是 ".to()".但 &qu ...

  9. 更改appstore开发商名字

    个人账号,名字要改,google了半天也没找出解决方案,最后发邮件求助水果,发来解决办法. 您好: 感谢您参与 Apple 开发者计划.我是 Daniel , 非常荣幸能就更改 iTunes Conn ...

  10. Linux网络编程-readn函数、writen函数、readline函数实现

    readn函数功能:在网络编程的读取数据中,通常会需要用到一个读指定字节才返回的函数,linux系统调用中没有给出,需要自己封装. readn实现代码: int readn(int fd, void ...