zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    多线程2.md
    Python-多线程.md
    Python-Log-note.md
    记账本开发记录——第四天(2020.1.21)
    记账本开发记录——第三天(2020.1.20)
    记账本开发记录——第二天(2020.1.19)
    《构建之法——现代软件工程》读书笔记(一)
    记账本开发记录——第一天(2020.1.18)
    JAVA分级测试——选课系统(补发)
    转专业后补修C语言的一些体会(4)
  • 原文地址:https://www.cnblogs.com/wintersun/p/1344347.html
Copyright © 2011-2022 走看看