zoukankan      html  css  js  c++  java
  • 【学习笔记】SQL语句处理分组合并

    背景

    今天在博问上看到一个SQL语句需求:

    表结构 

       id      name
        1       罗涛
        1       涛帅帅
        2       刘亮
        2       亮哥
        2       亮傻 

    要得出结果

        id         name
        1       罗涛,涛帅帅
        2       刘亮,亮哥,亮傻 

    解决方案

    这是一个典型的分组合并的需求,一般有两种方法,一是写一个函数处理,二是用xml for path方法,代码如下:

     1 --建立测试环境
     2 Create table BWTEST
     3 (
     4     id Int,
     5     name Varchar(10)
     6 )
     7 GO
     8 --插入数据
     9 Insert BWTEST Values(1,'罗涛')    
    10 Insert BWTEST Values(1,'涛帅帅')
    11 Insert BWTEST Values(2,'刘亮')
    12 Insert BWTEST Values(2,'亮哥')
    13 Insert BWTEST Values(2,'亮傻')
    14 GO
    15 
    16 --方法一:函数法
    17 --创建函数
    18 Create Function Getb(@id Int)
    19 RETURNS Varchar(8000)
    20 AS
    21     BEGIN
    22         DECLARE @s Varchar(8000)
    23         SET @s= ''
    24         SELECT @s=@s+','+name FROM BWTEST WHERE id=@id ;
    25         RETURN @s
    26     END
    27 GO
    28 
    29 --调用
    30 Select id, Substring(dbo.Getb(id),2,LEN(dbo.Getb(id))-1as name from BWTEST Group By id;
    31 
    32 
    33 --方法二:利用XML path法
    34 SELECT id,STUFF((SELECT ','+name FROM BWTEST WHERE id=BW.id FOR xml path('')),1,1,''AS name FROM BWTEST BW GROUP BY id
    35 
    36 
    37 --删除测试环境
    38 Drop Function Getb
    39 Drop table BWTEST
    40 --结果
    41 /*
    42 id          name
    43 ----------- --------
    44 1           罗涛,涛帅帅
    45 2           刘亮,亮哥,亮傻
    46 */ 

    扩展学习

    利用XML FOR PATH 合并分组信息

    sql STUFF用法

    SQL截取字符串

  • 相关阅读:
    变量1
    PHP 函数
    发送post请求
    XXE
    CSRF
    Html基础
    暴力破解
    Brup sute
    XSS
    URL 传参转义 (特殊符号转义)
  • 原文地址:https://www.cnblogs.com/artwl/p/1956709.html
Copyright © 2011-2022 走看看