--建立函数
create function f_getnamelist(@s_train varchar(20))
returns varchar(100)
as
begin
declare @s_name varchar(100)
set @s_name = ''select @s_name = rtrim(@s_name) + ' ' + rtrim(人员) from table
where 培训名称 = @s_trainreturn @s_name
end
--调用
select namelist.培训名称,
       namelist.单位名称,
       dbo.f_getnamelist(namelist.培训名称)
from (select distinct 培训名称,单位名称 from table) as namelist

解决方案 »

  1.   

    --建立測試環境
    create table [table]  (培訓名稱  varchar(50), 單位名稱 varchar(50),人員 varchar(20))
    insert into [table]
    select '第一期',          'A'    ,        '小張'  union all
    select '第一期'     ,     'A'     ,      '小沈' union all
    select '第一期'     ,     'B'     ,       '小紅' union all
    select '第二期'    ,    ' C '      ,     '小單' union all
    select '第二期'      ,    'E'       ,    ' 小容' union all
    select '第二期'      ,    'C'      ,     '小陳'
    --測試
    select A.培訓名稱,A.單位名稱 ,A.人員  into #tb
    from [table] A,[table] B 
    where a.培訓名稱=b.培訓名稱 and a.單位名稱=b.單位名稱 and A.人員<>B.人員select distinct 單位名稱,min(人員) as 人員
    from
    (
    select  A.人員+','+B.人員 as 人員,A.單位名稱  from #tb A ,#tb  B 
    where A.單位名稱=B.單位名稱  and A.人員<>B.人員 
    )C
    group by 單位名稱
    --刪除測試環境
    drop table #tb
    drop table [table]
      

  2.   

    就好在每個字符都加
    rtrim()函數
    select A.培訓名稱,A.單位名稱 ,A.人員  into #tb
    from [table] A,[table] B 
    where rtrim(a.培訓名稱)=rtrim(b.培訓名稱) and 
    rtrim(a.單位名稱)=rtrim(b.單位名稱) and rtrim(A.人員)<>rtrim(B.人員)select distinct 單位名稱,min(人員) as 人員
    from
    (
    select  A.人員+','+B.人員 as 人員,A.單位名稱  from #tb A ,#tb  B 
    where rtrim(A.單位名稱)=rtrim(B.單位名稱)  and rtrim(A.人員)<>rtrim(B.人員) 
    )C
    group by 單位名稱
      

  3.   

    不好意思改一下
    select A.培訓名稱,A.單位名稱 ,A.人員  into #tb
    from table5 A,table5 B 
    where Ltrim(a.培訓名稱)=Ltrim(b.培訓名稱) and 
    Ltrim(a.單位名稱)=Ltrim(b.單位名稱) and Ltrim(A.人員)<>Ltrim(B.人員)
    select * from
    (
    select  min(培訓名稱) as 培訓名稱,單位名稱,min(人員) as 人員
    from
    (
    select  A.培訓名稱,A.人員+','+B.人員 as 人員,A.單位名稱  from #tb A ,#tb  B 
    where Ltrim(A.單位名稱)=Ltrim(B.單位名稱)  and Ltrim(A.人員)<>Ltrim(B.人員) 
    )C
    group by 單位名稱
    union all 
    select *  from table5
     where 單位名稱  not in
    (
    select  distinct A.單位名稱  from #tb A ,#tb  B 
    where Ltrim(A.單位名稱)=Ltrim(B.單位名稱)  and Ltrim(A.人員)<>Ltrim(B.人員) 
    )
    )D
    order by 培訓名稱注﹕最好用Rtrim(Ltrim('  String  '))代替Ltrim('String')