现在有一张表score(成绩)
学生ID    数学    语文    英语    物理    化学    历史
1          56      60      72      56      70      92
2
。请问高手,能不能设计出一个视图,使得显示结果如下:
学生ID        及格成绩                    不及格成绩    总分   
1           60,72,70,92                  56,56       336

在线等,先谢谢大家了!

解决方案 »

  1.   

    create table Score
    (
    ID int,
    A int,
    B int,
    C int,
    D int,
    E int,
    F int
    )
    insert Score select 1,56,60,72,56,70,92
    union all select 2, 80, 52, 90, 90, 42, 42create function FUN(@ID int, @BZ bit)
    returns nvarchar(4000)
    as
    begin
    declare @re nvarchar(4000)
    set @re=''
    if @BZ=1
    select @re=@re+ case when A>=60 then cast(A as nvarchar)+',' else '' end,  
     @re=@re+ case when B>=60 then cast(B as nvarchar)+','  else '' end, 
    @re=@re + case when C>=60 then cast(C as nvarchar)+',' else '' end,
    @re=@re + case when D>=60 then cast(D as nvarchar)+',' else '' end, 
    @re=@re + case when E>=60 then cast(E as nvarchar)+','  else '' end, 
    @re=@re + case when F>=60 then cast(F as nvarchar)+',' else ''end
     from Score where ID=@ID
    else
    select @re=@re+ case when A<60 then cast(A as nvarchar)+',' else '' end,  
     @re=@re+ case when B<60 then cast(B as nvarchar)+','  else '' end, 
    @re=@re + case when C<60 then cast(C as nvarchar)+',' else '' end,
    @re=@re + case when D<60 then cast(D as nvarchar)+',' else '' end, 
    @re=@re + case when E<60 then cast(E as nvarchar)+','  else '' end, 
    @re=@re + case when F<60 then cast(F as nvarchar)+',' else ''end
     from Score where ID=@ID set @re=left(@re, len(@re)-1) return(@re)
    endselect ID,
    及格成绩=dbo.FUN(id, 1), 
    不及格成绩=dbo.FUN(id, 0), 
    总分=(A+B+C+D+E+F)
    from Score A
    drop function FUN
    drop table Score
      

  2.   

    1,科目数固定吗?
    2,显示的成绩中不能区分到底是哪科?
    3,楼上的有点复杂!
    如:
    --换一种思维思考!
    56      60      72      56      70      92
    --求及格时的总分,可以将不及格的分数转为0
    --求不及格的总分,可将及格的分数转为0,即可!
    --define function自己写吧