日期:2014-05-18  浏览次数:20549 次

在存储过程中的语句(急)
想实现的查询例如

一个表a_t   数据为
id     name     xueli   startdate     enddate             note
1       张明     大学     1999-09-01   2003-07-01       本科
2       张明     硕士     2003-09-01   2005-07-01       硕士
3       王树     大学     2001-09-01   2005-07-01       本科
4       李欢     大学     2000-09-01   2003-07-01       专科

实现:插到另一个表b_t
id     name               xljg                               start_end_date  
1       张明         大学;硕士           1999-09-01;2003-07-01;2003-09-01;2005-07-01
2       王树         大学                       2003-09-01;2005-07-01
3       李欢         大学                       2000-09-01;2003-07-01

当a_t表中   name相同那么   学历相加用‘;’分开,startdate和enddate相加按前后上下相加用‘;’分开

startdate为日期型
enddate为日期型
start_end_date为字符型


------解决方案--------------------
--环境
create table a_t
(
id int,
name varchar(10),
xueli varchar(10),
startdate datetime,
enddate datetime,
note varchar(10)
)

insert into a_t select 1, '张明 ', '大学 ', '1999-09-01 ', '2003-07-01 ', '本科 '
insert into a_t select 2, '张明 ', '硕士 ', '2003-09-01 ', '2005-07-01 ', '硕士 '
insert into a_t select 3, '王树 ', '大学 ', '2001-09-01 ', '2005-07-01 ', '本科 '
insert into a_t select 4, '李欢 ', '大学 ', '2000-09-01 ', '2003-07-01 ', '专科 '

go

--创建用户定义函数连接日期
create function f_datestr(@name varchar(100))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ' '
select @ret = @ret+ '; '+convert(varchar(10),startdate,120)+ '; '+convert(varchar(10),enddate,120) from a_t where name = @name
set @ret = stuff(@ret,1,1, ' ')
return @ret
end
go

--创建用户定义函数连接学历
create function f_xlstr(@name varchar(100))
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ' '
select @ret = @ret+ '; '+xueli from a_t where name = @name
set @ret = stuff(@ret,1,1, ' ')
return @ret
end
go

--插入数据
select identity(int,1,1) as id, name,dbo.f_xlstr(name) as xljg,dbo.f_datestr(name) as start_end_date
into b_t
from a_t
group by name

--查询
select * from b_t
--结果
1 李欢 大学 2000-09-01;2003-07-01
2 王树 大学 2001-09-01;2005-07-01
3 张明 大学;硕士 1999-09-01;2003-07-01;2003-09-01;2005-07-01

--删除环境
drop function f_datestr
drop function f_xlstr

------解决方案--------------------
-- Step 1 建立测试数据=======================================================
-- create table a_t([id] int,[name] varchar(10),xueli varchar(10),startdate datetim