有两个表
表A存储用户数据  [ID,UserName,Hot] ,Hot是int,用户的热门指数,值越大越热
表B存储用户所有用户发表的文章 [ID,UserID,Title,Content,Hot] ,Hot是int,文章的热门指数,值越大越热我想找出热门数值在前8的用户的名称,和这些用户的热门指数在前8的文章现在是这么做的1步:SELECT TOP ID,UserName FROM A ORDER BY Hot Desc
2步:DataReader.Read()
    userID1=DataReader["ID"]    DataReader.Read()
    userID2=DataReader["ID"]
    
    ...
3步:SELECT TOP 8 ID,Title FROM B WHERE UserID=userID1 ORDER BY Click DESC UNION SELECT TOP 8 ID,Title FROM B WHERE UserID=userID2 ORDER BY Click DESC...现在我想把这个写内容都让一个存储过程来完成,返回两个记录集即可,请问这个存储过程该怎么写?

解决方案 »

  1.   

    try
    select top 8 字段 from B where id in (select top 8 id from A ORDER BY A.HOT DESC) ORDER BY B.HOT
      

  2.   


    select top 8 username from A order by Hot descselect top 8 title from B where id in (select top 8 id from A order by a.hot desc) order by b.hot desc
      

  3.   

    谢谢楼上两位,取文章是每个用户8篇,而不是一共8篇相当于
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID1 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID2 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID3 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID4 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID5 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID6 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID7 ORDER BY Hot UNION
    SELECT TOP 8 ID,Title FROM B WHERE UserID=userID8 ORDER BY Hot
      

  4.   

    临时表可以有你要的效果,先select top 8 username from A order by Hot desc
    然后循环把各个ID要的8条加到临时表里。
    此外没有想到把64条数据放一个表的办法。
      

  5.   

    表A存储用户数据  [ID,UserName,Hot] ,Hot是int,用户的热门指数,值越大越热 
    表B存储用户所有用户发表的文章 [ID,UserID,Title,Content,Hot] ,Hot是int,文章的热门指数,值越大越热 我想找出热门数值在前8的用户的名称,和这些用户的热门指数在前8的文章select UserName,b.* from (select top 8 * from a)t1,b 
    where 
    id in(select top 8 id from a t where UserID=t.UserID order by hot desc)
    and t1.id=b.UserID
      

  6.   


    --稍作修改:
    select UserName,b.* from (select top 8 * from a order by Hot desc)t1,b 
    where 
    id in(select top 8 id from a t where UserID=t.UserID order by hot desc)
    and t1.id=b.UserID
      

  7.   

    create procedure liujie @student1 int,
     @student2 int,
     @Clumn varchar(80),
     @table varchar(80)
    asdeclare @sql varchar(500)
    begin  set @sql='select * from '+@table+' where '+@Clumn+' in(select top '+convert(varchar,@student1*@student2)+'  '+@Clumn+' from '+@table+') and '+@Clumn+' not in(select top '+convert(varchar,(@student1-1)*@student2)+'  '+@Clumn+' from '+@table+')'
      execute(@sql)end