表结构如下
Student 学生表Id(主键) Name
1 张三
2 李四ScoreType 分数类型表Id(主键) ScoreName attr
 1 语文 1
 2 数学 2
 3 英语 1Score 分数表Id(主键) StudentId(Student外键) ScoreTypeId(ScoreType外键) Score
1 1 1 80
2 1 2 85
3 2 1 75
4 2 2 90
5 1 3 66
6 2 3 77表的结构如上所示
求一条语名,得到ScoreType 的Attr为1的学生的成绩
得到哪下结果
姓名 语文 英语
张三 80 66
李四 75 77我知道一条SQL语句。。
declare @sql varchar(8000)
set @sql = 'select b.name'
select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
from ScoreType 
set @sql = @sql + ' from Scores a,Student b,ScoreType c '
         +' where a.StudentId=b.id and a.ScoreTypeId=c.id group by b.Name'
print @sql
exec(@sql)怎么在
select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
from ScoreType 里面把Attr=2的给去掉

解决方案 »

  1.   

    select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
    from ScoreType where attr<>2
      

  2.   

    declare @sql varchar(8000)
    set @sql = 'select b.name'
    select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
    from ScoreType 
    set @sql = @sql + ' from Scores a,Student b,ScoreType c '
             +' where a.StudentId=b.id and a.ScoreTypeId=c.id group by b.Name and c.attr<>2'
    print @sql
    exec(@sql)
      

  3.   


    declare @sql varchar(8000)
    set @sql = 'select b.name'
    select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
    from ScoreType 
    set @sql = @sql + ' from Scores a,Student b,ScoreType c '
             +' where a.StudentId=b.id and a.ScoreTypeId=c.id and c.attr=1 group by b.Name'
    print @sql
    exec(@sql)
      

  4.   

    declare @sql varchar(8000)
    set @sql = 'select b.name'
    select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
    from ScoreType where Attr<>2  --这里加一下就可以了set @sql = @sql + ' from Scores a,Student b,ScoreType c '
             +' where a.StudentId=b.id and a.ScoreTypeId=c.id group by b.Name'
    print @sql
    exec(@sql)
      

  5.   

    declare @sql varchar(8000)
    set @sql = 'select b.name'
    select @sql = @sql + ',max(case c.ScoreName when '''+ScoreName+''' then a.Score else 0 end) ['+ScoreName+']'
    from ScoreType where Attr<>2                         --在这里把条件加上
    set @sql = @sql + ' from Scores a,Student b,ScoreType c '
             +' where a.StudentId=b.id and a.ScoreTypeId=c.id group by b.Name'
    print @sql
    exec(@sql)