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