SELECT  '语文优秀' [状态], MIN(语文)[学科] FROM ( SELECT TOP 15 PERCENT  语文 FROM cj ORDER BY  语文 DESC )a 
UNION ALL
SELECT  '数学' ,   MIN(数学) FROM    ( SELECT TOP 15 PERCENT   数学   FROM   cj   ORDER BY  数学 DESC )b
UNION ALL
SELECT  '英语' , MIN(英语) FROM    ( SELECT TOP 15 PERCENT   英语   FROM  cj  ORDER BY  英语 DESC )c 
UNION ALL
SELECT  '生物' ,MIN(生物) FROM    ( SELECT TOP 15 PERCENT  生物    FROM   cj   ORDER BY  生物 DESC   )d 
UNION ALL  
SELECT  '政治' ,  MIN(政治) FROM    ( SELECT TOP 15 PERCENT  政治  FROM   cj   ORDER BY  政治 DESC  )e  
UNION ALL 
SELECT  '历史' ,  MIN(历史) FROM    ( SELECT TOP 15 PERCENT   历史 FROM  cj  ORDER BY  历史 DESC)f请问在存储过程中,如何使用变量、循环等实现如上的查询,不胜感谢

解决方案 »

  1.   

    其实我觉得没必要搞什么循环吧。一般用select 字段名,min(成绩) from tb group by 字段名就可以算出来,但是希望你给出表结构、少量数据及期待结果。
      

  2.   

    用动态SQL实现,科目名称作为变量.
    因为不清楚LZ的表结构,无法帮你写语句喔.
      

  3.   


    --給你一個思路吧
     
    --1)創建存儲過程
    CREATE PROCEDURE myprocedure 
    AS
    DECLARE @i INT
    set @i=1
    while @i<=3
    BEGIN
    insert #temp (字段1,字段2)
    select 字段1,字段2 from cj where 班级=@i
    set @i=@i+1
    END
    GO
     
    --2)創建臨時表保存循環查詢的結果
    create table #temp (字段1 varchar(10),字段2 int);
    --3)執行存儲過程
    exec myprocedure
    --4)查詢循環查詢的結果
    select * from #temp
      

  4.   

    CREATE PROCEDURE myprocedure 
    AS
    create table #temp(字段1,字段2)
    DECLARE @i INT
    set @i=1
    while @i<=3
    BEGIN
    insert #temp (字段1,字段2)
    select 字段1,字段2 from cj where 班级=@i
    set @i=@i+1
    END
    select * from #temp
    GO