日期:2014-05-18 浏览次数:20582 次
现在我有两个表一个是人员表,一个是项目表 我想将两个字段中的信息进行转换 人员表 id 姓名 1 张三 2 李四 项目表 id 项目名称 人员 1 a 1,2, 2 b 1, 我想要这样的结果 项目名称 人员 a 张三,李四 b 张三 不知道我表述的清楚不清楚,谢谢了
if object_id('[人员表]') is not null drop table [人员表]
go
create table [人员表]([id] int,[姓名] varchar(4))
insert [人员表]
select 1,'张三' union all
select 2,'李四'
go
if object_id('[项目表]') is not null drop table [项目表]
go
create table [项目表]([id] int,[项目名称] varchar(1),[人员] varchar(4))
insert [项目表]
select 1,'a','1,2,' union all
select 2,'b','1,'
go
--sql2005及以上版本
;with t1 as(
select b.项目名称,a.姓名
from 人员表 a
join 项目表 b on charindex(','+ltrim(a.id)+',',','+b.人员)>0
)
select 项目名称,
人员=stuff((select ','+姓名 from t1 where 项目名称=t.项目名称 for xml path('')),1,1,'')
from t1 t
group by 项目名称
/**
项目名称 人员
---- --------------------
a 张三,李四
b 张三
(2 行受影响)
**/
--sql2000用函数
create function f_name(@id varchar(10))
returns varchar(1000)
as
begin
declare @str varchar(1000)
set @str=''
select @str=@str+','+姓名 from 人员表 where charindex(','+ltrim(id)+',',','+@id)>0
return stuff(@str,1,1,'')
end
go
select 项目名称,人员=dbo.f_name(人员) from 项目表
/**
项目名称 人员
---- -----------------
a 张三,李四
b 张三
(2 行受影响)
**/
------解决方案--------------------
/*
现在我有两个表一个是人员表,一个是项目表
我想将两个字段中的信息进行转换
人员表
id 姓名
1 张三
2 李四
项目表
id 项目名称 人员
1 a 1,2,
2 b 1,
我想要这样的结果
项目名称 人员
a 张三,李四
b 张三
不知道我表述的清楚不清楚,谢谢了
*/
go
if OBJECT_ID('t1') is not null
drop table t1
go
create table t1(
id varchar(5),
pname varchar(10)
)
go
insert t1
select '1','张三' union all
select '2','李四'
go
if OBJECT_ID('t2') is not null
drop table t2
go
create table t2(
id varchar(5),
iname varchar(5),
pname varchar(100)
)
insert t2
select '1','a','1,2,' union all
select '2','b','1,'
go
if OBJECT_ID('fun_tracy') is not null
drop function fun_tracy
go
create function fun_tracy(@id varchar(10))
returns varchar(100)
as
begin
declare @str varchar(100)
set @str=''
select @str=@str+','+pname from t1
where charindex(','+ltrim(id)+',',','+@id)>0
return stuff(@str,1,1,'')
end
--调用函数:
select iname as 项目名称,项目人员=dbo.fun_tracy(pname) from t2
/*
你要的结果:
项目名称 项目人员
a 张三,李四
b 张三
*/