编号     名称               电影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分了!

解决方案 »

  1.   

    -------没有经过测试----
    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
    endselect dbo.f(电影ID) from table_name group by 电影ID
      

  2.   

    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
      

  3.   

    ---创建测试数据
    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 行)
    */
      

  4.   

    if object_id('t') is not null
    drop table t
    create  table  t(编号 int,    名称 varchar(20), 电影ID   int, 时间 datetime)
    insert into t     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 tcreate function f_str(@Str  int)
    returns varchar(100)
    as
    begin 
    declare @e varchar(800)
    set @e=''
    select @e=@e+'-'+名称 from t where 电影ID=@Str order by 编号
    set @e=stuff(@e,1,1,'')
    return @e
    endselect  电影ID, dbo.f_str(电影ID) as 名称   from t group by 电影ID/*
    电影ID 名称
    -------------------------------------------------
    352 极限特工/1.rmvb-极限特工/2.rmvb
    360 刀剑笑/1.rmvb
    368 变相怪杰2/1.rmvb-变相怪杰2/2.rmvb
    369 球爱咖啡屋/1.rmvb
    374 大话西游之大圣娶
    */
      

  5.   

    改下我的那个函数
    Alter 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,2,'')
      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 行)
    */
      

  6.   


    create table ta(编号 int, 名称 varchar(50), 电影ID int,  时间  int)insert into ta
    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,NULLdeclare @sql varchar(8000)
    SELECT @sql = 'select 电影ID'
    select @sql = @sql + ',max(case con when '''+cast(con as varchar)+''' then 名称 end ) as  '''+cast(con as varchar) +'''' from (select distinct con  from (select a.*,(select count(1) 
    from ta where 电影ID=a.电影ID and a.编号>编号) con  from ta a)a) as a
    select @sql = @sql + ',sum(isnull(时间,0)) 时间 from (select a.*,(select count(1) 
    from ta where 电影ID=a.电影ID and a.编号>编号) con  from ta a)a group by 电影ID'--print @sql
    exec(@sql)/**
    电影ID      0                 1  时间
    ------------------ ----------- ------------------- 
    352   极限特工/1.rmvb      极限特工/2.rmvb    0
    360   刀剑笑/1.rmvb                  NULL    0
    368   变相怪杰2/1.rmvb     变相怪杰2/2.rmvb   0
    369   球爱咖啡屋/1.rmvb              NULL     0
    374   大话西游之大圣娶       NULL     0警告: 聚合或其它 SET 操作消除了空值。**/