在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。

posted on 2008-11-30 17:00  PetterLiu  阅读(12289)  评论(0编辑  收藏  举报