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的连乘的更多相关文章
- T-SQL学习记录
T-sql是对SQL(structure query language )的升级.可以加函数. 系统数据库:master管理数据库.model模版数据库,msdb备份等操作需要用到的数据库,tempd ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(下)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 五.透视.逆透视及分组 5.1 透视 所谓透视( ...
- 《MSSQL2008技术内幕:T-SQL语言基础》读书笔记(上)
索引: 一.SQL Server的体系结构 二.查询 三.表表达式 四.集合运算 五.透视.逆透视及分组 六.数据修改 七.事务和并发 八.可编程对象 一.SQL Server体系结构 1.1 数据库 ...
- TSQL 分组集(Grouping Sets)
分组集(Grouping Sets)是多个分组的并集,用于在一个查询中,按照不同的分组列对集合进行聚合运算,等价于对单个分组使用“union all”,计算多个结果集的并集.使用分组集的聚合查询,返回 ...
- T-sql语句查询执行顺序
前言 数据库的查询执行,毋庸置疑是程序员必备技能之一,然而数据库查询执行的过程绚烂多彩,却是很少被人了解,今天哥哥要带你装逼带你飞,深入一下这sql查询的来龙去脉,为查询的性能优化处理打个基础,或许面 ...
- T-SQL 查询XML
我们经常在SQL Server列中存一些XML来作为配置文件或者是保存特殊信息,那么如何将其展开并查询它或将其呈现为关系数据? 其实在T-SQL 下可以很容易的实现. 示例xml <catalo ...
- T-SQL 转义select … like中的特殊字符(百分号)
众所周知,T-SQL中LIKE运算符使用%符号表示通配符.很多时候可能需要查询包含有%的数据,比如需要查询字段coupon中含有5%的数据.那么如何使用已经有百分号(%)符号的LIKE搜索字符串呢? ...
- T-SQL Recipes之Separating elements
Separating elements Separating elements is a classic T-SQL challenge. It involves a table called Arr ...
- T-SQL Recipes之Database Backups
The Problem 在DBA和T-SQL码奴日常工作中,比如常规检查,服务管理,数据库管理, 是其中最具挑战性的一个领域. 在相似任务中,比如索引碎片管理,统计管理,数据库备份是异常重要的,对任何 ...
- T-SQL Recipes之Organizing and Archiving Data
The Problem 当我们处理存档数据或内存数据时,我们想要自定义命名表名,数据库,架构加上日期,时间,或者应用名时,用标准的TSQL来实现是比较困难的. 假设我们有一张日志表,增长速度异常快.但 ...
随机推荐
- php判断 !==false
测试 if($res !== false){ echo "未定义通过<br>"; }else{ echo "未定义不通过<br>"; } ...
- 【EF学习笔记06】----------加载关联表的数据 延迟加载
讲解之前,先来看一下我们的数据库结构:班级表 学生表 延迟加载 //延迟加载 using (var db = new Entities()) { //查询班级 var classes = (from ...
- yum 介绍
yum是一个用于管理rpm包的后台程序,用python写成,可以非常方便的解决rpm的依赖关系.在建立好yum服务器后,yum客户端可以通过 http.ftp方式获得软件包,并使用方便的命令直接管理. ...
- mongo 查找附近点
db.runCommand({geoNear:"demo", near: { type: "Point" , coordinates: [118.134535, ...
- android系统中查看哪些端口被哪些应用打开
1 查看哪些端口开放,netstat 2 根据端口号获取到UID,比如端口号为10050,转成16进制是2742,使用命令grep -i 2742 /proc/net/tcp6,就能看到其UID,假如 ...
- 接收 ajax POST 方式传入的参数
----前台--- var list = new Array(); var params = { gencodeid : "test001", value : "01&q ...
- C# 命令绑定
在构建WinForm程序中,为了使系统的结构清晰,有好的用户交互体验,实现不同按钮之间的交互,不使主窗体里面的代码臃肿.将按钮的命令通过类进行绑定,实现命令的管理使很有必要的. 该文章是将如何实现Bu ...
- 心情闲适,发几个tatanic的图
第一次看这个是98年在高一的同学家里. 唯一的月末休息时,那时没有电话,老父以为我会在下午到caojp,结果老父在寒风中等我一个下午,发火了.
- AngularJS学习--- AngularJS中的模板template和迭代器过滤filter step2 step3
1.AngularJS 模板---step2: mvc(Model-View-Controller)模式在后端用的比较多,在前端也是一样的常用; 在AngularJS中,一个视图是模型通过HTML模板 ...
- WPF中设置快捷键
方式1: 窗体中加入资源 <UserControl.Resources> <RoutedUICommand x:Key="Cut" Text=&qu ...