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。

  • 相关阅读:
    一款好用的绘图软件gnuplot
    剑指offer--18.从尾到头打印链表
    剑指offer--17.第一个只出现一次的字符
    剑指offer--16.数组中重复的数字
    剑指offer--15.把字符串转换成整数
    剑指offer--14.求1+2+3+...+n
    剑指offer--13.二进制中1的个数
    剑指offer--12.不用加减乘除做加法
    剑指offer--11.数组中出现次数超过一半的数字
    剑指offer--10.最小的K个数
  • 原文地址:https://www.cnblogs.com/wintersun/p/1344347.html
Copyright © 2011-2022 走看看