mssql

推荐列表 站点导航

当前位置:首页 > 数据库 > mssql >

解析SQLServer任意列之间的聚合

来源:网络整理  作者:网络  发布时间:2020-12-09 13:58
这里介绍一个通过xml合并列并转为行集后直接用聚合函数求值的方法,测试用例和代码如下...
insert into @t

运行原理:字段合并为 xml 后做 xquery 查询转为行集后聚合
sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。
/*
id smallint ,
测试功能:对一张表的列数据做 min 、 max 、 sum 和 avg 运算
avg ( r) as avgValue
max ( r) as maxValue,


a smallint , b smallint ,
outer apply(
c smallint , d smallint ,
) c
sum ( r) as sumValue,
-- 测试语句
*/
------ ------ ------ ------ ------ ------ ------ ----------- ----------- ----------- -----------
select
e smallint , f smallint )
/* 测试结果
--------------------------------------------------------------------------------
) b
from (
id a b c d e f minValue maxValue sumValue avgValue
from doc. nodes( '/a,b,c,d,e,f' ) D( n)) tt
select 2, 34, 45, 56, 54, 9, 6
-- 建立测试环境
declare @t table (
select * from @t as doc where id= a. id for xml path ( '' ), type )
2 34 45 56 54 9 6 6 56 204 34
select doc=(
select 1, 1, 2, 3, 4, 6, 7 union all
from @t a outer apply(
1 1 2 3 4 6 7 1 7 23 3
min ( r) as minValue,
测试名称:利用 XML 求任意列之间的聚合
select a.*, c.*
select cast ( cast ( d. n. query( 'text()' ) as varchar ( max )) as int ) as r
*/

相关热词: 解析

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!

本文地址: https://www.juheyunku.com/sql/mssql/1828.shtml

最新文章
sql server 关于设置null的一 sql server 关于设置null的一

时间:2020-12-28

详解SQL游标的用法 详解SQL游标的用法

时间:2020-12-27

vs code连接sql server数据库步 vs code连接sql server数据库步

时间:2020-12-27

图书管理系统的sqlserver数 图书管理系统的sqlserver数

时间:2020-12-25

详解SQL 通配符 详解SQL 通配符

时间:2020-12-25

sql四大排名函数之ROW_NUM sql四大排名函数之ROW_NUM

时间:2020-12-25

SQLServer数据库处于恢复挂 SQLServer数据库处于恢复挂

时间:2020-12-24

Win10 64位安装个人版SQL20 Win10 64位安装个人版SQL20

时间:2020-12-24

Copyright © www.juheyunku.com      关于 | 合作 | 声明 | 联系 | 更新 | 地图 | Tags

解析SQLServer任意列之间的聚合

2020-12-09 编辑:网络

insert into @t

运行原理:字段合并为 xml 后做 xquery 查询转为行集后聚合
sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。
/*
id smallint ,
测试功能:对一张表的列数据做 min 、 max 、 sum 和 avg 运算
avg ( r) as avgValue
max ( r) as maxValue,


a smallint , b smallint ,
outer apply(
c smallint , d smallint ,
) c
sum ( r) as sumValue,
-- 测试语句
*/
------ ------ ------ ------ ------ ------ ------ ----------- ----------- ----------- -----------
select
e smallint , f smallint )
/* 测试结果
--------------------------------------------------------------------------------
) b
from (
id a b c d e f minValue maxValue sumValue avgValue
from doc. nodes( '/a,b,c,d,e,f' ) D( n)) tt
select 2, 34, 45, 56, 54, 9, 6
-- 建立测试环境
declare @t table (
select * from @t as doc where id= a. id for xml path ( '' ), type )
2 34 45 56 54 9 6 6 56 204 34
select doc=(
select 1, 1, 2, 3, 4, 6, 7 union all
from @t a outer apply(
1 1 2 3 4 6 7 1 7 23 3
min ( r) as minValue,
测试名称:利用 XML 求任意列之间的聚合
select a.*, c.*
select cast ( cast ( d. n. query( 'text()' ) as varchar ( max )) as int ) as r
*/

本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供学习参考!
本文地址为 https://www.juheyunku.com/sql/mssql/1828.shtml

相关文章

风云图片

推荐阅读

返回mssql频道首页