• 技术文章 >数据库 >mysql教程

    解析SQLServer任意列之间的聚合

    2016-06-07 16:18:41原创477

    sql的max之类的聚合函数只能针对同一列的n行运算,如果对n列运算,一般都用case 语句来判断,如果列少还比较容易写,列多了就麻烦了。 -------------------------------------------------------------------------------- /* 测试名称:利用 XML 求任意列之

    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
    */

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:Oracle中临时文件File#和Db_files关系 下一篇:Oracle 10g RAC网络设置
    Web大前端开发直播班

    相关文章推荐

    • mysql怎么增加权限• 夯实MySQL基础的问题归纳• mysql视图与表的区别是什么• mysql怎么删除unique约束• mysql怎么修改表前缀

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网