SQL语句解决方案

sxqqtj 2009-04-28 09:48:19

需求ID 需求描述 工序 执行人 日期
1001 ERP开发 需求调研 1001 2009-4-1
1001 ERP开发 概要设计 1002 2009-4-15
1001 ERP开发 详细设计 1003 2009-4-20
1001 ERP开发 编码 1004 2009-4-30

想得到这样的结果
需求ID 需求描述 需求调研(执行人)需求调研(日期) 概要设计(执行人) 概要设计(日期) 详细设计(执行人)详细设计(日期)...
1001 ERP开发 1001 2009-4-1 1002 2009-4-15 1003 2009-4-20

工序不一定,大家帮帮忙想个解决方法
...全文
63 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sxqqtj 2009-04-28
  • 打赏
  • 举报
回复
谢谢各位!
htl258_Tony 2009-04-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 happyflystone 的回复:]
SQL code------------------------------------------------------------------------
-- 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)
--
------…
[/Quote]顶石头.
百年树人 2009-04-28
  • 打赏
  • 举报
回复
顶石头
-狙击手- 2009-04-28
  • 打赏
  • 举报
回复
------------------------------------------------------------------------
-- 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) a

exec('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
sxqqtj 2009-04-28
  • 打赏
  • 举报
回复
行列互换可以换成这样
需求ID 需求描述 需求调研(执行人)需求调研(日期) 概要设计(执行人) 概要设计(日期) 详细设计(执行人)详细设计(日期)
1001 ERP开发 1001 2009-4-1
1001 ERP开发 1002 2009-4-15
1001 ERP开发 1003 2009-4-20

我想通一个需求一行
claro 2009-04-28
  • 打赏
  • 举报
回复
帮顶。
ks_reny 2009-04-28
  • 打赏
  • 举报
回复
又是行列互换。
-狙击手- 2009-04-28
  • 打赏
  • 举报
回复
又见行列转换,精华里多得 去了

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧