解析SQLServer任意列之间的聚合

时间:2024-01-17 12:48:29 

sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。
--------------------------------------------------------------------------------
/*
测试名称:利用 XML 求任意列之间的聚合
测试功能:对一张表的列数据做 min 、 max 、 sum 和 avg 运算
运行原理:字段合并为 xml 后做 xquery 查询转为行集后聚合
*/
-- 建立测试环境
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
*/

标签:SQLServer,任意列,聚合
0
投稿

猜你喜欢

  • 在SQLite-Python中实现返回、查询中文字段的方法

    2022-05-31 00:17:32
  • Python中Yield的基本用法

    2021-08-30 15:34:55
  • Python学习之虚拟环境原理详解

    2023-02-12 16:45:52
  • 由prototype_1.3.1进入javascript殿堂-类的初探

    2008-05-22 12:44:00
  • Python实现的插入排序,冒泡排序,快速排序,选择排序算法示例

    2023-06-09 02:51:16
  • 如何编写CSS代码才能更有效率

    2007-11-07 18:51:00
  • Go语言JSON解析器gjson使用方法详解

    2024-02-10 20:11:08
  • vue实现手机号码的校验实例代码(防抖函数的应用场景)

    2024-05-29 22:19:44
  • Python3.5常见内置方法参数用法实例详解

    2023-02-24 21:38:38
  • 详解golang避免循环import问题(“import cycle not allowed”)

    2024-05-22 10:19:30
  • Python时间和字符串转换操作实例分析

    2023-04-15 22:58:08
  • Python编程实现数学运算求一元二次方程的实根算法示例

    2023-08-08 05:38:40
  • 如何让vsCode显示中文界面

    2023-05-31 10:22:50
  • 图文详解laravel多对多关联模型

    2023-06-12 22:21:34
  • 使用mss2sql工具将SqlServer转换为Mysql全记录

    2024-01-24 11:59:37
  • 教你漂亮打印Pandas DataFrames和Series

    2022-11-10 19:08:56
  • Oracle数据表中的死锁情况解决方法

    2024-01-15 11:23:01
  • python爬虫爬取幽默笑话网站

    2021-05-31 18:32:58
  • MYSQL删除重复数据的简单方法

    2024-01-20 17:00:21
  • ASP给长的标题加省略号...

    2008-02-22 14:39:00
  • asp之家 网络编程 m.aspxhome.com