如果你表中的course数据种类不固定,就一定要用存储过程或上面的语句段,否则可以直接写select num,
  高等数学=sum(case course when '高等数学' then score end),
  大学英语=sum(case course when '大学英语' then score end),
  计算机基础=sum(case course when '计算机基础' then score end),
  ...其他项...
from grade group by num

解决方案 »

  1.   

    我想要做成交叉表的形式,一般情况下“表中的course数据种类是不固定”,比如楼主的本例,“在学校中,课程都是在变动的,不可能学校教20门课,就一直定下来了,以后也不会增加或减少了”,关键还是“楼主希望能不用存储过程实现交叉的目的”。只能UP,不能替楼主解决,深以为憾!
      

  2.   

    CREATE PROCEDURE dbo.subject  AS
    declare @sql varchar(8000)
    set @sql = 'select num,'
    select @sql = @sql + 'sum(case course when '''+course+'''then score else 0 end) as '''+course+''','from (select distinct course from grade) as a
    select @sql = left(@sql,len(@sql)-1) + ' from grade group by num'
    return
    GO我现在用了写了这个存储过程 在查询分析器中exec subject时只显示命令成功没有结果显示,但是用
    declare @sql varchar(8000)
    set @sql = 'select num,'
    select @sql = @sql + 'sum(case course when '''+course+'''then score else 0 end) as '''+course+''','from (select distinct course from grade) as a
    select @sql = left(@sql,len(@sql)-1) + ' from grade group by num'
    exec(@sql)
    的时候就有结果显示
    这是什么原因啊
      

  3.   

    如果是动态的,哪你只可一通过stored procedure来实现。如果是静态的可以通过VIEW。