看懂這個,就會做了:--函數,合並字符串欄位
--測試數據
/*
CREATE table person_info(dept_name varchar(10),position_name varchar(10),person_name varchar(10))
INSERT INTO person_info
SELECT '資訊部','軟件編碼員','小李'
UNION ALL SELECT '資訊部','軟件編碼員','小王'
UNION ALL SELECT '行政部','秘書','小芳'
*/
--合並函數
CREATE FUNCTION FunMergeCharField(@vchA varchar(10),@vchB varchar(10))
RETURNS varchar(8000)
AS
BEGIN
DECLARE @r varchar(8000)
SET @r=''
SELECT @r=@r+','+person_name FROM person_info WHERE dept_name=@vchA and position_name=@vchB
RETURN(substring(@r,2,8000))
END
GO
--删除测试
DROP TABLE person_info
DROP FUNCTION FunMergeCharField--調用
SELECT dept_name,position_name,在職人員=dbo.FunMergeCharField(dept_name,position_name) 
FROM person_info 
GROUP BY dept_name,position_name
go

解决方案 »

  1.   

    測試結果
    --調用
    SELECT dept_name,position_name,在職人員=dbo.FunMergeCharField(dept_name,position_name) 
    FROM person_info 
    GROUP BY dept_name,position_name
    go
    --返回結果
    ------------------------------------------------------------------
    行政部 秘書 小芳
    資訊部 軟件編碼員 小李,小王樓主可稍做修改
      

  2.   

    --或者用临时表,应该效率更低,你可以自己测试一下:
    select Name,Category,aa=cast('' as varchar) into #t
    from tablea order by Categorydeclare @Category int,@a varchar(8000)
    update #t set @a=case @Category when Category then @a+','+rtrim(name) else rtrim(name) end
    ,aa=@a,@Category=Categoryselect name=max(aa),Category from #t group by Categorydrop table #t
      

  3.   

    请问 progress99(如履薄冰):SELECT @r=@r+','+person_name FROM person_info WHERE dept_name=@vchA and position_name=@vchB
    这条语句为什么能把“小李,小王”循环取出来,它有循环语句的功能吗,为什么?帮我解释一下好吗?