SQLServer任意列之间的聚合
来源:互联网 发布:淘宝设置运费模板 编辑:程序博客网 时间:2024/05/24 03:02
SQLServer任意列之间的聚合 收藏
sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。这里介绍一个通过xml合并列并转为行集后直接用聚合函数求值的方法,测试用例和代码如下
--------------------------------------------------------------------------------
/*
测试名称:利用 XML 求任意列之间的聚合
测试功能:对一张表的列数据做 min 、 max 、 sum 和 avg 运算
运行原理:字段合并为 xml 后做 xquery 查询转为行集后聚合
作者: jinjazz (近身剪)
*/
-- 建立测试环境
declare @t table (
id smallint ,
a smallint , b smallint ,
c smallint , d smallint ,
e smallint , f smallint )
insert into @t
select 1, 1, 2, 3, 4, 6, 7 union all
select 2, 34, 45, 56, 54, 9, 6
-- 测试语句
select a.*, c.*
from @t a outer apply(
select doc=(
select * from @t as doc where id= a. id for xml path ( '' ), type )
) b
outer apply(
select
min ( r) as minValue,
max ( r) as maxValue,
sum ( r) as sumValue,
avg ( r) as avgValue
from (
select cast ( cast ( d. n. query( 'text()' ) as varchar ( max )) as int ) as r
from doc. nodes( '/a,b,c,d,e,f' ) D( n)) tt
) c
/* 测试结果
id a b c d e f minValue maxValue sumValue avgValue
------ ------ ------ ------ ------ ------ ------ ----------- ----------- ----------- -----------
1 1 2 3 4 6 7 1 7 23 3
2 34 45 56 54 9 6 6 56 204 34
*/
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/jinjazz/archive/2009/03/27/4031167.aspx
- SQLServer任意列之间的聚合
- SQLServer任意列之间的聚合
- 任意进制数之间的转换
- sqlserver聚合非聚合索引
- 聚合与组合之间的关系
- 继承、关联、聚合、组合之间的关系
- ext columnmodel获取任意列的值
- Asp.Net 中实现DataGrid指定列的聚合功能,支持模板列聚合
- 给定的 ColumnMapping 与源或目标中的任意列均不匹配 与 从bcp 客户端收到的列长度无效 从excel导入SqlServer
- 给定的 ColumnMapping 与源或目标中的任意列均不匹配 与 从bcp 客户端收到的列长度无效 从excel导入SqlServer
- 表格 列与列之间的间距
- sqlserver 聚合函数
- SQLSERVER聚合函数
- 【SqlServer系列】聚合函数
- 计算两个任意日期之间的工作日
- 计算任意俩日期之间的天数
- 转基本数据类型之间的任意转换
- 输出任意两数之间的素数
- 过渡到SSAS之一:简单模型认识
- 过渡到SSAS之二:服务的发布
- SQLServer数据集合的交、并、差集运算
- 存储过程中的行集作为子查询
- SQLServer中的循环批处理
- SQLServer任意列之间的聚合
- UJA1065的应用
- 18句话入门SQLServer XML
- 使用T-SQL生成树形目录(引用)
- sql2005中一个xml聚合的例子
- SQL2005 Anerlysis Service的处理维度中一个BUG的分析
- 编程方式访问多维数据集(SQLSERVER2005 Analysis Services)
- 用于开发人员的 OLAP教程
- 关于SSAS中从多个cube中查询数据