我还是觉得你另外一个贴,要多个字段才更有意义SELECT
T1.zymc
,MAX(CASE T3.[name] WHEN '审核'THEN T2.p_name END)[审核]
,MAX(CASE T3.[name] WHEN '校对'THEN T2.p_name END)[校对]
,MAX(CASE T3.[name] WHEN '项目负责人'THEN T2.p_name END)[项目负责人]
FROM Prj_OldProjectStaffArrange T1
LEFT JOIN SYS_Login T2 ON T1.ygbh=T2.Person_id
LEFT JOIN Prj_OldDivisionOfWork T3 on T1.fgbh=T3.bh
WHERE T1.ywbh ='N06-a-001';
GROUP BY T1.zymc

解决方案 »

  1.   


    是啊、
    这种可以改成动态的么,不然新增一种种类 还是回头改sql
      

  2.   

    DECLARE @SQL VARCHAR(MAX)
    SET @SQL='SELECT T1.zymc'
    SELECT @SQL=@SQL+',MAX(CASE WHEN T3.[name]='''+[name]+''' THEN T2.p_name END)['+[name]+']'
    FROM Prj_OldDivisionOfWork --如果有重复就加 GROUP BY [name]
    SET @SQL=@SQL+'FROM Prj_OldProjectStaffArrange T1
    LEFT JOIN SYS_Login T2 ON T1.ygbh=T2.Person_id
    LEFT JOIN Prj_OldDivisionOfWork T3 ON T1.fgbh=T3.bh
    WHERE T1.ywbh =''N06-a-001''
    GROUP BY T1.zymc'
    EXEC(@SQL)你调下,大概是这样
      

  3.   


    对,sql语句能查询出这样的结果么
      

  4.   

    SELECT T3.[name]
    ,STUFF(
    (SELECT ','+T2.p_name FROM Prj_OldProjectStaffArrange T1
    JOIN SYS_Login T2 ON T1.ygbh=T2.Person_id
    WHERE T1.fgbh=T3.bh)
    ,1,1,'')[p_name]
    FROM Prj_OldDivisionOfWork T3
      

  5.   

    SELECT T3.[name]
    ,STUFF(
    (SELECT ','+T2.p_name FROM Prj_OldProjectStaffArrange T1
    JOIN SYS_Login T2 ON T1.ygbh=T2.Person_id
    WHERE T1.fgbh=T3.bh
    FOR XML PATH(''))
    ,1,1,'')[p_name]
    FROM Prj_OldDivisionOfWork T3
      

  6.   

    楼主一楼的需求完全可以实现啊,动态的pivot就OK. 参照如下例子.CREATE TABLE tbl
    (
    p_name VARCHAR(99),
    name VARCHAR(99)
    );
    INSERT INTO tbl VALUES(N'叶青',N'项目负责人'),(N'陈雄志',N'审核'),(N'明伟华',N'审核'),(N'高艳',N'校对'),(N'陈浩',N'设计'),(N'吴祖磊',N'校对'),(N'郭宏',N'设计'),(N'余华刚',N'设计'),(N'朱娟',N'校对'),(N'汪勰',N'审核');
    DECLARE @selectNames VARCHAR(MAX);
    SELECT @selectNames = ISNULL(@selectNames+',','')+N'ISNULL('+QUOTENAME(columnName)+N','''') AS '+QUOTENAME(columnName) FROM(SELECT DISTINCT name AS columnName FROM tbl) t;DECLARE @pivotNames VARCHAR(MAX);  
    SELECT @pivotNames= ISNULL(@pivotNames+',','')+QUOTENAME(columnName) FROM(SELECT DISTINCT name AS columnName FROM tbl) t;
    DECLARE @sqlStr NVARCHAR(MAX)=N'
    ;WITH CTE AS
    (
    SELECT *,ROW_NUMBER() OVER(PARTITION BY name order by p_name) as rn FROM tbl
    )
    SELECT #selectColumns# FROM CTE 
    PIVOT
    (
    MAX(p_name) FOR NAME IN (#pivotcolumns#)
    )AS pivTbl';SELECT @sqlStr = REPLACE(REPLACE(@sqlStr,N'#pivotcolumns#',@pivotNames),N'#selectColumns#',@selectNames);
    SELECT @sqlStr
    EXEC sp_executesql @sqlStr;
    /*
    设计 审核 项目负责人 校对
    陈浩 陈雄志 叶青 高艳
    郭宏 明伟华 吴祖磊
    余华刚 汪勰 朱娟
    */回到你具体的需求,只需要把你的query改下替换到上面例子中的CTE中即可
    select  yg.p_name,fg.name,row_number() over(partition by fg.name order by yg.p_name) from Prj_OldProjectStaffArrange ap  
     left join SYS_Login yg on ap.ygbh=yg.Person_id  
     left join  Prj_OldDivisionOfWork fg on ap.fgbh=fg.bh
       where ap.ywbh ='N06-a-001';p.s.
    PIVOT 请参照 http://msdn.microsoft.com/zh-tw/library/ms177410.aspx