在存储过程中的语句(急)
想实现的查询例如
:
一个表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 datetime,enddate datetime,note varchar(10))
--
--
-- insert a_t
-- select 1, '张明 ', '大学 ', '1999-09-01 ', '2003-07-01 ', '本科 '
-- union all
-- select 2, '张明 ', '硕士 ', '2003-09-01 ', '2005-07-01 ', '硕士 '
-- union all
-- select 3, '王树 ', '大学 ', '2001-09-01 ', '2005-07-01 ', '本科 '
-- union all
-- select 4, '李欢 ', '大学 ', '2000-09-01 ', '2003-07-01 ', '专科 '
--Step 2 建立自定义函数=========================================================
--
-- ALTER FUNCTION dbo.f_str(@name varchar(10),@flag bit)
-- RETURNS varchar(100)
-- AS
-- BEGIN
-- DECLARE @re varchar(100)
-- SET @re= ' '
--
-- if @flag = 0
-- begin
-- SELECT @re=@re+ '; '+xueli
-- FROM a_t
-- WHERE [name]=@name
-- end
-- else
-- begin
-- SELECT @re=@re+ '; '+ convert(varchar(10),startdate,120) + '; ' + convert(varchar(10),enddate,120)
-- FROM a_t
-- WHERE [name]=@name
-- end
-- RETURN(STUFF(@re,1,1, ' '))
-- END
-- Step 3 运行语句=====================================
select [name],dbo.f_str([name],0),dbo.f_str([name],1) from a_t
group by [name]