这样的数据库结构,如何排列,同时排列第一条记录和最后一条记录
编号 名称 电影ID 时间
3081 极限特工/1.rmvb 352 NULL
3082 极限特工/2.rmvb 352 NULL
3140 刀剑笑/1.rmvb 360 NULL
3155 变相怪杰2/1.rmvb 368 NULL
3156 变相怪杰2/2.rmvb 368 NULL
3157 球爱咖啡屋/1.rmvb 369 NULL
3166 大话西游之大圣娶 374 NULL
现在我想按 电影ID排列 提取到列表里:如:
极限特工/1.rmvb-- 极限特工/2.rmvb 时间
就是要重复的电影ID的 不同影片名称 在一行记录上显示
就是提取第一条,和最后一条记录 一行显示,能不能实现啊?
高手赐教
只有20分了!
------解决方案--------------------用函数实现
------解决方案---------------------------没有经过测试----
create function f(@id int)
returns varchar(8000)
begin
declare @str varchar(8000)
declare @id_max int,@id_min int
select @str= ' ',@id_max=0,@id_min=0
select @id_max=max(编号),@id_min=min(编号) from table_name where 电影ID=@id
select @str=@str+ '-- '+名称 from table_name where 电影ID=@id and (编号=@id_min or 编号=@id_max)
select @str=stuff(@str,1,2, ' ')
return @str
end
select dbo.f(电影ID) from table_name group by 电影ID
------解决方案--------------------create function dbo.fnMergeT(@ID varchar(10))
returns varchar(8000)
as
begin
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ '-- '+[名称] from 表 where 电影ID=@ID
return stuff(@sql,1,1, ' ')
end
go
------解决方案-----------------------创建测试数据
create table 表(编号 int,名称 varchar(100),电影ID int,时间 datetime)
insert 表 select 3081, '限特工/1.rmvb ', 352,NULL
union all select 3082, '限特工/2.rmvb ', 352,NULL
union all select 3140, '剑笑/1.rmvb ' , 360,NULL
union all select 3155, '相怪杰2/1.rmvb ',368,NULL
union all select 3156, '相怪杰2/2.rmvb ',368,NULL
union all select 3157, '爱咖啡屋/1.rmvb ',369,NULL
union all select 3166, '话西游之大圣娶 ', 374,NULL
---查看测试数据
select * from 表
---创建函数
create function dbo.fnMergeT(@ID varchar(10))
returns varchar(8000)
as
begin
declare @sql varchar(8000)
set @sql= ' '
select @sql=@sql+ '-- '+[名称] from 表 where 电影ID=@ID
return stuff(@sql,1,1, ' ')
end
go
---查看结果
select 电影ID,dbo.fnMergeT(电影ID) as 名称 from 表 group by 电影ID
/*
电影ID 名称
----------- --------------------------------
352 -限特工/1.rmvb--限特工/2.rmvb
360 -剑笑/1.rmvb
368 -相怪杰2/1.rmvb--相怪杰2/2.rmvb
369 -爱咖啡屋/1.rmvb
374 -话西游之大圣娶
(所影响的行数为 5 行)
*/