• SQL合并列值两种新方法


          在SQL SERVER中,有时需要合多列值到行的需求,常见的方法有:1.创建自定义函数,2.使用游标法进行字符串合并。3.使用临

    时表实现字符串合并。
         数据:

            DEPTNO EMPS
    ------ ----------
    10 CLARK
    10 KING
    10 MILLER
    20 SMITH
    20 ADAMS
    20 FORD
    20 SCOTT
    20 JONES
    30 ALLEN
    30 BLAKE
    30 MARTIN
    30 JAMES
    30 TURNER
    30 WARD
    


    期望结果:

    	 DEPTNO EMPS
    ------- ------------------------------------
    10 CLARK,KING,MILLER
    20 SMITH,JONES,SCOTT,ADAMS,FORD
    30 ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES


       方法:
    -1.xmloutput---------------------------------------
    --
    http://wintersun.cnblogs.com
    --
    -------------------------------------------------
    SELECT *
    FROM(
        
    SELECT DISTINCT 
            deptno
        
    FROM emp
    )A
    OUTER APPLY(
        
    SELECT 
            
    [values]= STUFF(REPLACE(REPLACE(
                (
                    
    SELECT ENAME FROM emp N
                    
    WHERE deptno = A.deptno
                    
    FOR XML AUTO
                ), 
    '<N ENAME="'','), '"/>'''), 11'')
    )N

    -2.---using CTE----------------------------------------
    --
    Creating a Delimited List from Table Rows
    --
    http://wintersun.cnblogs.com
    --
    -----------------------------------------------------
      with x (deptno, cnt, list, empno, len)
             
    as (
         
    select deptno, count(*over (partition by deptno),
                
    cast(ename as varchar(100)),
                empno,
                
    1
           
    from emp
          
    union all
         
    select x.deptno, x.cnt,
                
    cast(x.list + ',' + e.ename as varchar(100)),
                e.empno, x.
    len+1
           
    from emp e, x
         
    where e.deptno = x.deptno
           
    and e.empno > x. empno
                    )
         
    select deptno,list
           
    from x
          
    where len = cnt
          
    order by 1


    测试的用的表与数据:
    tableAndData

    另说个题外话,之前想在SQL2005导入文本数据需要打SP2,后来直接用EMS.Data.Import.2007.for.SQL.Server完事,
    软件体积才5M。

  • 相关阅读:
    Java连接MySql报错—— com.mysql.cj.exceptions.InvalidConnectionAttributeException
    Java——XML基础知识
    Java——多线程基础知识
    Java——线程安全的集合
    Java——集合
    dom4j——使用dom4j生成xml
    Java——用程序编译一个文件夹下所有java文件到另一个文件夹下
    Java——DOS命令窗口用命令编译文件夹下所有.java文件
    Java——删除Map集合中key-value值
    python 枚举Enum
  • 原文地址:https://www.cnblogs.com/wintersun/p/1344347.html
Copyright © 2020-2023  润新知