Create Function F_GetStr(@userid int)
returns varchar(200)
as
begin
   declare @return varchar(200)
   set @return=''
   select @return=@return+','+User_name+'' from User where Userid=@Userid
   return stuff(@return,1,1,'')
endselect 
   film_name=(select film_name from film where film_nameid=film_nameid),
   user_name=dbo.F_GetStr(film_nameid)
from
   user_film
group by film_nameid   
order by film_nameid

解决方案 »

  1.   

    create table film
    (
    film_nameid int,
    film_name varchar( 100 )
    )
    goinsert into film
    select 1, '城市猎人' union
    select 2, '阿滋漫画大王'
    gocreate table [user]
    (
    [userid] int,
    [user_name] varchar( 100 )
    )
    goinsert into [user]
    select 1, '撩' union
    select 2, '阿香' union 
    select 3, '千带' union
    select 4, '阿咪'
    gocreate table [user_film]
    (
    film_nameid int,
    [user_id] int
    )
    goinsert into user_film
    select 1, 1 union
    select 1, 2 union
    select 2, 3 union
    select 2, 4 
    gocreate function stp_GetUsers( @film_nameid int )
    returns varchar( 100 )
    as
    begin
    declare @result varchar( 100 )
    set @result = ''
    select @result = @result + b.[user_name] + ','
    from user_film a
    inner join [user] b on a.[user_id] = b.[userid]
    where a.film_nameid = @film_nameid
    set @result = substring( @result, 1, len( @result ) - 1 )
    return @result
    end
    goselect b.film_name, a.[user_name] 
    from (  select film_nameid, dbo.stp_GetUsers( film_nameid ) as [user_name]
    from user_film 
    group by film_nameid
    ) as a
    inner join film b
    on a.film_nameid = b.film_nameid
    godrop function stp_GetUsers
    go
    drop table film, [user], user_film
    go
      

  2.   

    --测试环境
    create table film
    (film_nameid int,
     film_name  nvarchar(50))
    insert film
    select 1,'城市猎人' union all
    select 2,'阿滋漫画大王' 
    go
    create table users
    (userid int,
     users_name nvarchar(5))
    insert users
    select 1,'撩' union all
    select 2,'阿香' union all
    select 3,'千带' union all
    select 4,'阿咪' 
    go
    create table user_film
    (film_nameid int,
     users_id int)
    insert user_film
    select 1,1 union all
    select 1,2 union all
    select 2,3 union all
    select 2,4 
    ---建立一个视图
    create view cx_view
    as
    select  a.film_name,
    b.users_name 
    from film a,users b,user_film c
    where a.film_nameid = c.film_nameid and b.userid = c.users_id
    go
    ---再自定义一个函数
    create function dbo.fc_cx(@var varchar(20)) 
    returns varchar(200) 
    as
    begin
    declare @s varchar(2000)
    set @s = ''
    select @s = @s + ',' + users_name from cx_view where film_name = @var
    set @s = stuff(@s,1,1,'')
    return @s
    end
    go
    ----使用
    select film_name,dbo.fc_cx(film_name) as users_name from cx_view
    group by film_name
    ------结果-------
    /*
    film_name       users_name
    阿滋漫画大王     千带,阿咪
    城市猎人         撩,阿香
    */