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也就是协办可能会有两个以上的人,怎么合并他们?

解决方案 »

  1.   

    用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