学号 科目 成绩
----------- ---------- ----------
1 语文 60.0
1 数学 70.0
1 英语 75.0
2 语文 55.0
2 数学 53.0
2 英语 71.0
3 语文 80.0
4 数学 .0
5 英语 91.0--执行查询
declare @sql varchar(8000)
set @sql = ''
select @sql=@sql+ ','+科目+'=max(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from temp
group by 科目
exec('select b.*,a.总分,a.平均分
from(select 学号, sum(成绩)总分, sum(成绩)/count(学号)平均分 from temp group by 学号)a,
(select 学号' +@sql+ ' from temp group by 学号)b
where a.学号=b.学号')
--结果
学号 数学 英语 语文 总分 平均分
----------- ---------- ---------- ---------- ---------------------------------------- ----------------------------------------
1 70.0 75.0 60.0 205.0 68.333333
2 53.0 71.0 55.0 179.0 59.666666
3 .0 .0 80.0 80.0 80.000000
4 .0 .0 .0 .0 .000000
5 .0 91.0 .0 91.0 91.000000
----------- ---------- ----------
1 语文 60.0
1 数学 70.0
1 英语 75.0
2 语文 55.0
2 数学 53.0
2 英语 71.0
3 语文 80.0
4 数学 .0
5 英语 91.0--执行查询
declare @sql varchar(8000)
set @sql = ''
select @sql=@sql+ ','+科目+'=max(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from temp
group by 科目
exec('select b.*,a.总分,a.平均分
from(select 学号, sum(成绩)总分, sum(成绩)/count(学号)平均分 from temp group by 学号)a,
(select 学号' +@sql+ ' from temp group by 学号)b
where a.学号=b.学号')
--结果
学号 数学 英语 语文 总分 平均分
----------- ---------- ---------- ---------- ---------------------------------------- ----------------------------------------
1 70.0 75.0 60.0 205.0 68.333333
2 53.0 71.0 55.0 179.0 59.666666
3 .0 .0 80.0 80.0 80.000000
4 .0 .0 .0 .0 .000000
5 .0 91.0 .0 91.0 91.000000
功能中的sql语句 max(case Xueke when '''+Xueke+''' then Chengji else 0 end)'其中 ''' 三个单引号连续使用的语法问题 为什么用三个而不是两个 我有些分辨不清初
declare @s char
set @s = '''' print '@s = ' + @s 那么打印出来就是 @s = '