现在有一张表score(成绩)
学生ID 数学 语文 英语 物理 化学 历史
1 56 60 72 56 70 92
2
。请问高手,能不能设计出一个视图,使得显示结果如下:
学生ID 及格成绩 不及格成绩 总分
1 60,72,70,92 56,56 336
在线等,先谢谢大家了!
学生ID 数学 语文 英语 物理 化学 历史
1 56 60 72 56 70 92
2
。请问高手,能不能设计出一个视图,使得显示结果如下:
学生ID 及格成绩 不及格成绩 总分
1 60,72,70,92 56,56 336
在线等,先谢谢大家了!
(
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,显示的成绩中不能区分到底是哪科?
3,楼上的有点复杂!
如:
--换一种思维思考!
56 60 72 56 70 92
--求及格时的总分,可以将不及格的分数转为0
--求不及格的总分,可将及格的分数转为0,即可!
--define function自己写吧