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,'')
FROM cte A
) M
PIVOT
(MAX(姓名) FOR 性质 IN([主管],[分管],[主办],[协办])) N