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。

  • 相关阅读:
    微信小程序支付【前端】
    CSS主题切换
    利用Proxy写了个存储管理
    前端存储cookie操作
    canvas电子签名和播放划线
    【原创】[Ext.ux.UploadDialog] 控件使用说明及在Ext 3.x下问题解决
    【原创】分享一组VC++底层图像处理函数
    【转发】SQL Server数据库被质疑解决方案
    SVN 解决update失败出现乱码提示或工作副本已经锁定
    Qt 外部子模块的3种使用方法,以QtXlsx为例
  • 原文地址:https://www.cnblogs.com/wintersun/p/1344347.html
Copyright © 2011-2022 走看看