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

各位大佬,我又来了。

CREATE TABLE [dbo].[系统数据_员工信息](
[员工代码] [int] IDENTITY(1,1) NOT NULL,
[姓名] [nchar](4) NULL,
[机构代码] [int] NULL,

CREATE TABLE [dbo].[工作管理_工作列表](
[工作序号] [int] IDENTITY(1,1) NOT NULL,
[发布人] [nvarchar](4) NULL,
[发布日期] [datetime] NULL,
[状态] [nvarchar](3) NULL,

CREATE TABLE [dbo].[工作管理_工作分工](
[序号] [int] IDENTITY(1,1) NOT NULL,
[工作序号] [int] NULL,
[员工代码] [int] NULL,
[性质] [nvarchar](2) NULL,

以上是表结构
想得到以下结果:
工作序号 主管 分管  主办   协办
 001      张x  李x   黄x   王x、刘x

也就是协办可能会有两个以上的人,怎么合并他们?



------解决方案--------------------
用FOR XML PATH,如下请参考:
/*TB1
dah    fid
A       10
A       11
A       12
B       20 
B       21
B       22 
C       30
C       31
要出来的效果是
dah    fid
A       10,11,12
B       20,21,22
C       30,31
*/
WITH CTE AS (SELECT
'A' dah,10 fid UNION SELECT
'A',11 UNION SELECT
'A',12 UNION SELECT
'B',20 UNION SELECT
'B',21 UNION SELECT
'B',22 UNION SELECT
'C',30 UNION SELECT
'C',31
)
SELECT dah,fid=STUFF((SELECT ','+CAST(fid AS VARCHAR(10)) FROM CTE WHERE dah=t.dah FOR XML PATH('')),1,1,'')
FROM CTE t
GROUP BY t.dah