首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql 求纠错。该怎么解决

2013-08-09 
sql 求纠错。use gysys select a.工作序号,(case when a.性质 主管 then b.姓名 else end) as 主管,(

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

热点排行