zoukankan      html  css  js  c++  java
  • sql关于group by之后把每一条记录的详情的某个字段值合并提取的方法

    在利用group by写了统计语句之后,还有一个查看每一个记录详情的需求,

    首先想到的是根据group by的条件去拼接查询条件,

    但是条件有点多,拼接起来不仅麻烦,还容易出错,

    所以想到要在group by之后同时把详情记录的ID给拼接成逗号分隔的字符串(‘1’,‘2’,‘3’)这种形式,这样再去取详情记录就很简单了

    还是万能的博客园里面找到的方法:

    select
      route_code,domain_id,type_id,COUNT(id0) as cnt,
         stuff(
         (        
         ----stuff函数用于删除指定长度的字符,并可以在指定的起点处插入另一组字符
             select ','+cast(id0 as varchar)---字段拼接
             from PMS_T_D_AssetInfo t  
             where t.route_code=PMS_T_D_AssetInfo.route_code  
             and t.domain_id=PMS_T_D_AssetInfo.domain_id
             and t.type_id=PMS_T_D_AssetInfo.type_id   
             for xml path('')
         )
         , 1, 1, '') as idStr
         --stuff将参数4的空字符串在参数1字符串的第1个(参数2)字符位置起替换掉1(参数3)个长度
    from  
    PMS_T_D_AssetInfo 
    group by 
    route_code,domain_id,type_id

    得到的结果如下:

    效果看上去很好,

    但是,

    统计数据大了之后,这个拼接字段会非常长,最后想想还是算了,还不如我直接拼接查询条件呢,

    但是,这个方法还是不错的,在拼接字段明确有限的情况下可以用!

    最后,

    附上新认识的stuff函数简介:

    一、作用

    删除指定长度的字符,并在指定的起点处插入另一组字符。

    二、语法

    STUFF ( character_expression , start , length ,character_expression )

    参数


    character_expression
    一个字符数据表达式。character_expression 可以是常量、变量,也可以是字符列或二进制数据列。

    start
    一个整数值,指定删除和插入的开始位置。如果 start 或 length 为负,则返回空字符串。如果 start 比第一个 character_expression 长,则返回空字符串。start 可以是 bigint 类型。

    length
    一个整数,指定要删除的字符数。如果 length 比第一个 character_expression 长,则最多删除到最后一个 character_expression 中的最后一个字符。length 可以是 bigint 类型。

    返回类型
    如果 character_expression 是受支持的字符数据类型,则返回字符数据。如果 character_expression 是一个受支持的 binary 数据类型,则返回二进制数据。

    示例:

    select STUFF('abcdefg',1,0,'1234')       --结果为'1234abcdefg'
    select STUFF('abcdefg',1,1,'1234')       --结果为'1234bcdefg'
    select STUFF('abcdefg',2,1,'1234')       --结果为'a1234cdefg'
    select STUFF('abcdefg',2,2,'1234')       --结果为'a1234defg'
  • 相关阅读:
    为了快一点为什么却要慢一点
    大数与小数的求和算法
    Tips for newbie to read source code
    学习Data Science/Deep Learning的一些材料
    Git Sophisticated Commands
    两套JRE
    Java environment variables and their functionality
    Change Git Default Editor in Windows
    Multiton & Singleton
    Java Synchronized Blocks
  • 原文地址:https://www.cnblogs.com/lyd2016/p/7898318.html
Copyright © 2011-2022 走看看