use gysys 
select a.工作序号,
(case when a.性质 ='主管' then b.姓名 else '' end) as 主管,
(case when a.性质 ='分管' then b.姓名 else '' end) as 分管,
(case when a.性质 ='主办' then b.姓名 else '' end) as 主办,
(case when a.性质 ='协办' then b.姓名 else '' end) as 协办
 from 工作管理_工作分工 as a 
 inner join 系统数据_员工信息 as b on a.员工代码=b.员工代码 
 where a.工作序号=37
sql 基础很差,想得到的结果是工作序号  主管 分管  主办  协办
001      李x  王x  刘x  张x、章x、陈x就是协办这一列应该有很多名字,我不知道应该怎么把他们合起来。 

解决方案 »

  1.   


    ;with sel as(select a.工作序号,
    (case when a.性质 ='主管' then b.姓名 else '' end) as 主管,
    (case when a.性质 ='分管' then b.姓名 else '' end) as 分管,
    (case when a.性质 ='主办' then b.姓名 else '' end) as 主办,
    (case when a.性质 ='协办' then b.姓名 else '' end) as 协办
     from 工作管理_工作分工 as a 
     inner join 系统数据_员工信息 as b on a.员工代码=b.员工代码 
     where a.工作序号=37)
    select 工作序号,max(主管) as 主管,max(分管) as 分管
    ,max(主办) as 主办,stuff((select ','+协办  from sel where 工作序号=s.工作序号
     for xml path('')),1,1,'') as 协办
    from sel s group by 工作序号楼主用你的数据测试下
      

  2.   

    试一下:
    ;WITH cte AS 
    (
    select a.工作序号,a.性质,b.姓名
    from 工作管理_工作分工 as a 
    inner join 系统数据_员工信息 as b 
    on a.员工代码=b.员工代码
    where a.工作序号=37
    )
    SELECT * FROM
    (
    SELECT
    a.工作序号, a.性质,
    姓名=STUFF((SELECT ','+B.姓名 FROM cte B WHERE B.工作序号 = A.工作序号 AND B.性质 = A.性质 FOR XML PATH('')),1,1,'')
    FROM cte A
    ) M
    PIVOT
    (MAX(姓名) FOR 性质 IN([主管],[分管],[主办],[协办])) N