日期:2014-05-17  浏览次数:20654 次

sql 求纠错。

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

就是协办这一列应该有很多名字,我不知道应该怎么把他们合起来。

 

------解决方案--------------------

;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 工作序号

楼主用你的数据测试下
------解决方案--------------------
试一下:
;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,'')