多列转一行

select A,STUFF ((select ' ,'+B+': '+Convert(varchar(20),Convert(int,C))+
' '+D+' * '+Convert(varchar(20),Convert(int,E))+' '+F
from G as tb01
where tb01.A=tb02.A for xml path('')),1,2,'') as H
from I as tb02
where tb02.A in ('A','B','C')
group by tb02.A

上面的方法仅用于 MSSQL 2005 或以上

目前的项目需求是 mssql 2000 且要求去掉重复项 使用如下代码搞定

/*  
-- 合并多列到一行 加入去重功能 MSSQL  
*/  
CREATE FUNCTION STUFF(@i int,@field1 varchar(2000),@field2 varchar(2000))  
RETURNS varchar(8000)  
AS  
BEGIN  
    DECLARE @values varchar(8000)  
    SET @values = ''  
    if @i=1 -- 这里只能固定的 1 是求 位置 和 2 是求 备注 和  
  SELECT @values = @values + ',' + InLocation FROM table WHERE WorkID=@field1 and SheetNo=@field2 Group by WorkID,SheetNo,InLocation
    else  
  SELECT @values = @values + ',' + Remark FROM table WHERE WorkID=@field1 and SheetNo=@field2 Group by WorkID,SheetNo,Remark 
    RETURN STUFF(@values, 1, 1, '')  
END
原文地址:https://www.cnblogs.com/z5337/p/4120455.html