一个按要求合并行的问题
表单编号 接收时间 审批步骤 是否终止
1001 2006-12-11 1 否
1001 2006-12-11 2 否
1001 2006-12-12 3 是
1002 2006-12-09 1 否
1002 2006-12-11 2 否
我只想知道某编号的总体情况而已:
表单编号 发起时间 是否终止
1001 2006-12-11 是
1002 2006-12-09 否
发起时间是第一步的接收时间,是否终止是看当前最后一步的是否终止
另外,请问哪本书有讲这方面知识的?谢谢
------解决方案----------------------测试数据
create table 表(表单编号 int,接收时间 datetime,审批步骤 int,是否终止 varchar(2))
insert 表 select 1001, '2006-12-11 ', 1, '否 '
union select 1001, '2006-12-11 ', 2, '否 '
union select 1001, '2006-12-12 ', 3, '是 '
union select 1002, '2006-12-09 ', 1, '否 '
union select 1002, '2006-12-11 ', 2, '否 '
go
select 表单编号,发起时间=min(接收时间),
是否终止=(select 是否终止 from 表 b
where b.表单编号=a.表单编号
and not exists(select 1 from 表 where 表单编号=b.表单编号 and 接收时间> b.接收时间))
from 表 a
group by 表单编号
--删除测试数据
drop table 表
/*结果
表单编号 发起时间 是否终止
----------- ------------------------------------------------------ ----
1001 2006-12-11 00:00:00.000 是
1002 2006-12-09 00:00:00.000 否
*/
------解决方案--------------------create table T(表单编号 char(4), 接收时间 datetime, 审批步骤 int, 是否终止 nvarchar(1))
insert T select '1001 ', '2006-12-11 ', 1, '否 '
union all select '1001 ', '2006-12-11 ', 2, '否 '
union all select '1001 ', '2006-12-12 ', 3, '是 '
union all select '1002 ', '2006-12-09 ', 1, '否 '
union all select '1002 ', '2006-12-11 ', 2, '否 '
select 表单编号,
发起时间=(select 接收时间 from T where 审批步骤=1 and 表单编号=A.表单编号),
是否终止=(select 是否终止 from T where 表单编号=A.表单编号 and 审批步骤=max(A.审批步骤))
from T as A
group by 表单编号
--result
表单编号 发起时间 是否终止
---- ------------------------------------------------