行列互换可以换成这样
需求ID  需求描述  需求调研(执行人)需求调研(日期)  概要设计(执行人)  概要设计(日期)  详细设计(执行人)详细设计(日期)
1001    ERP开发  1001              2009-4-1             
1001    ERP开发                                       1002                2009-4-15          
1001    ERP开发                                                                              1003            2009-4-20我想通一个需求一行

解决方案 »

  1.   

    ------------------------------------------------------------------------
    -- Author:  happyflystone  
    -- Date  :  2009-04-28 21:50:42
    -- Ver:     Microsoft SQL Server 2005 - 9.00.2047.00 (Intel X86) 
    --       Apr 14 2006 01:12:25 
    --       Copyright (c) 1988-2005 Microsoft Corporation
    --       Standard Edition on Windows NT 5.0 (Build 2195: Service Pack 4)
    --      
    -------------------------------------------------------------------------- Test Data: T1
    IF OBJECT_ID('T1') IS NOT NULL 
        DROP TABLE T1
    Go
    CREATE TABLE T1(需求ID INT,需求描述 NVARCHAR(5),工序 NVARCHAR(4),执行人 INT,日期 SMALLDATETIME)
    Go
    INSERT INTO T1
    SELECT 1001,'ERP开发','需求调研',1001,'2009-4-1' UNION ALL
    SELECT 1001,'ERP开发','概要设计',1002,'2009-4-15' UNION ALL
    SELECT 1001,'ERP开发','详细设计',1003,'2009-4-20' UNION ALL
    SELECT 1001,'ERP开发','编码',1004,'2009-4-30' 
    GO
    --Start
    declare @s varchar(8000)
    select @s = isnull(@s+',','')+ '['+ 工序+'(执行人)] = max(case when  工序 = '''+工序+''' then 执行人 else ''''end),'
     + '['+ 工序+'(日期)] = max(case when  工序 = '''+工序+''' then 日期 else ''''end)'
    from (select distinct 工序 from t1) aexec('select 需求ID,需求描述, '+@s+ ' from t1 group by 需求ID,需求描述')--Result:
    /*需求ID        需求描述  编码(执行人)     编码(日期)                  概要设计(执行人)   概要设计(日期)                详细设计(执行人)   详细设计(日期)                需求调研(执行人)   需求调研(日期)
    ----------- ----- ----------- ----------------------- ----------- ----------------------- ----------- ----------------------- ----------- -----------------------
    1001        ERP开发 1004        2009-04-30 00:00:00     1002        2009-04-15 00:00:00     1003        2009-04-20 00:00:00     1001        2009-04-01 00:00:00
    */
    --End