有一个表temp,数据如下所示:
ID(key) Code Name
1 001 名称101
2 001 名称102
3 002 名称201
4 003 名称301想得到以下的检索结果
001 名称101;名称102
002 名称201
003 名称301想要实现的功能是:Code相同的记录,就把Name合并到一起。
这样的检索语句应该怎么写?谢谢各位大虾!
ID(key) Code Name
1 001 名称101
2 001 名称102
3 002 名称201
4 003 名称301想得到以下的检索结果
001 名称101;名称102
002 名称201
003 名称301想要实现的功能是:Code相同的记录,就把Name合并到一起。
这样的检索语句应该怎么写?谢谢各位大虾!
解决方案 »
- SQL Server 2005 安装
- sql2005维护计划中执行t-sql语句任务报错,单引号变双引号 再发一次大家帮忙看一下
- 重装了win2003系统和sqlserver2000数据库,不知道为什么原来的数据库里时间字段变成 2006-2-21 下午 01:49:06 这种格式了,怎么回事?
- 关于Sql AnyWhere 的两个问题?
- SQL中有沒有取整的函數
- 两个数据库之间的同步问题
- 急:一个简单问题
- update更新临时表问题
- 急!中文sql2000下表字段文本输入内容不能超过1024个汉字,请问怎么解决?
- 求助,这个sql该怎么写啊,有个流水表,找符合这条件的账号
- update触发器的问题
- 各位大虾,sql server中只取时间操作?
create table 表(部门 int,人员 varchar(20))
insert into 表 select 1,'张三'
insert into 表 select 1,'李四'
insert into 表 select 1,'王五'
insert into 表 select 2,'赵六'
insert into 表 select 2,'邓七'
insert into 表 select 2,'刘八'
go--创建用户定义函数
create function f_str(@department int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+','+人员 from 表 where 部门 = @department
set @ret = stuff(@ret,1,1,'')
return @ret
end
go
--执行
select 部门,人员=dbo.f_str(部门) from 表 group by 部门 order by 部门
go--输出结果
/*
部门 人员
---- --------------
1 张三,李四,王五
2 赵六,邓七,刘八
*/
--删除测试数据
drop function f_str
drop table 表
go
create table tb(id int,code varchar(100),Name varchar(100))
go
insert into tb
select 1,'001','名称101' union all
select 1,'001','名称102' union all
select 2,'002','名称201' union all
select 3,'003','名称301' go
--写一个聚合函数:
create function dbo.fn_Merge(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+';'+Name from tb where Code=@id
return stuff(@r,1,1,'')
end
go-- 调用函数
select id, dbo.fn_Merge(id) as name from tb group by id
go
drop table tb
drop function fn_Merge
create table temp(ID int,Code varchar(4),Name varchar(20))
insert into temp select 1,'001','名称101'
insert into temp select 2,'001','名称102'
insert into temp select 3,'002','名称201'
insert into temp select 4,'003','名称301'
go--创建用户定义函数
create function f_str(@Code int)
returns varchar(8000)
as
begin
declare @ret varchar(8000)
set @ret = ''
select @ret = @ret+';'+Name from temp where Code = @Code
set @ret = stuff(@ret,1,1,'')
return @ret
end
go--执行
select Code,Name=dbo.f_str(Code) from temp group by Code order by Code
go
--输出结果
/*
Code Name
---- -------------------
001 名称101;名称102
002 名称201
003 名称301
*/--删除测试数据
drop function f_str
drop table temp
go
create table tb(id int,code varchar(100),Name varchar(100))
go
insert into tb
select 1,'001','名称101' union all
select 1,'001','名称102' union all
select 2,'002','名称201' union all
select 3,'003','名称301' go
--写一个聚合函数:
create function dbo.fn_Merge(@id int)
returns varchar(8000)
as
begin
declare @r varchar(8000)
set @r=''
select @r=@r+';'+Name from tb where Code=@id
return stuff(@r,1,1,'')
end
go-- 调用函数
select code, dbo.fn_Merge(code) as name from tb group by code
go
drop table tb
drop function fn_Merge
@Code varchar(10)
)
returns varchar(300)
as
begin
declare @r varchar(300)
set @r=''
select @r=@r+';'+name from temp where code=@code
if @r<>''
set @r=stuff(@r,1,1,'')
return @r
endgo--调用
select code,dbo.fn_Names(code) as Name
from tmp
group by code
FROM(
SELECT DISTINCT
code
FROM tb
)A
CROSS APPLY(
SELECT Re = STUFF((
SELECT v = Name
FROM tb t
WHERE code = A.code
FOR XML AUTO, TYPE
).query('<r>
{for $i in /t/@v return concat(",",string($i))}
</r>').value('/r[1]','nvarchar(max)'), 1, 1, '')
)B