大家好,我现有个需求,表结构如下:
ID,床位名称,姓名 开始日期 结束日期 结束原因
1. 2201 张三 20131101 20131108 不适应
2 2202 张三 20131109 至今 XXXx
如何通过,sql 实现以下功能:
序号 变化描述 时间 原因
1 2201 =2002 20131108 -- 20131109 不适应。
谢谢
ID,床位名称,姓名 开始日期 结束日期 结束原因
1. 2201 张三 20131101 20131108 不适应
2 2202 张三 20131109 至今 XXXx
如何通过,sql 实现以下功能:
序号 变化描述 时间 原因
1 2201 =2002 20131108 -- 20131109 不适应。
谢谢
--drop table tbcreate table tb
(
ID int,
床位名称 varchar(20),
姓名 varchar(20),
开始日期 varchar(20),
结束日期 varchar(20),
结束原因 varchar(20)
)insert into tb
select 1, '2201', '张三', '20131101', '20131108','不适应' union all
select 2, '2202', '张三', '20131109', '至今' ,'XXXx'
go
select min(t1.ID) as id,
min(t1.床位名称) +isnull('='+max(t2.床位名称),'') as 变化描述,
min(t1.结束日期) + ISNULL('-'+MAX(t1.开始日期),'') as 时间,
min(t1.结束原因) as 原因
from tb t1
inner join tb t2
on t1.姓名 = t2.姓名
and t1.ID < t2.ID
group by t1.姓名
/*
id 变化描述 时间 原因
1 2201=2202 20131108-20131101 不适应
*/
drop table #aa
go
create table #aa
(
ID int,
床位名称 varchar(20),
姓名 varchar(20),
开始日期 varchar(20),
结束日期 varchar(20),
结束原因 varchar(20)
)
insert into #aa
select 1, '2201', '张三', '20131101', '20131108','不适应' union all
select 2, '2202', '张三', '20131109', '至今' ,'XXXx'
go
select a.id , a.床位名称+'='+b.床位名称 as 变化描述 ,
a.结束日期+'-'+b.开始日期 as 时间 ,
a.结束原因 as 原因
from #aa a inner join #aa b on b.id>a.id
/* id 变化描述 时间 原因
1 2201=2202 20131108-20131109 不适应
*/
drop table #aa
go
create table #aa
(
ID int,
床位名称 varchar(20),
姓名 varchar(20),
开始日期 varchar(20),
结束日期 varchar(20),
结束原因 varchar(20)
)
insert into #aa
select 1, '2201', '张三', '20131101', '20131108','不适应' union all
select 2, '2202', '张三', '20131109', '20130010' ,'很不适应' union all
select 3, '2203', '张三', '20131111', '至今' , 'XXXxx' union all
select 4, '2204', '李四', '20131109', '20130010' ,'很不适应' union all
select 5, '2205', '李四', '20131111', '至今' , 'XXXxx'
go
select Max(a.id)as 序号 , Max(a.床位名称)+'='+min(b.床位名称) as 变化描述 ,
Max(a.结束日期)+'-'+min(b.开始日期 ) as 时间 ,
Max(a.结束原因) as 原因
from #aa a inner join #aa b on b.id>a.id and a.姓名=b.姓名
group by a.床位名称 /*
序号 变化描述 时间 原因1 2201=2202 20131108-20131109 不适应
2 2202=2203 20130010-20131111 很不适应
4 2204=2205 20130010-20131111 很不适应
*/