刚刚学习SQL有很多不明白的地方
在网上看到这样一个事例,但是有很多地方不理解,请朋友们帮着讲解一下:假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82执行代码如下:
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from CJ group by name'
exec(@sql)
有些地方看不懂,能不能详细讲解一下这个执行语句.谢谢了
在网上看到这样一个事例,但是有很多地方不理解,请朋友们帮着讲解一下:假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82执行代码如下:
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from CJ group by name'
exec(@sql)
有些地方看不懂,能不能详细讲解一下这个执行语句.谢谢了
set @sql = 'select Name'--变量赋值
---(移出)
select @sql = @sql+' from CJ group by name'--变量赋值(串连接)
exec(@sql)--执行动态语句
----
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a--可分解为下面两句
select Subject,Subject from (select distinct Subject from CJ) as a
select @sql = @sql +'字串'
---即每行数据会将查询结果串接到@sql变量中
--再用print(@sql)打印出结果就更明白了
打印出来就一目了然了!
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from
--(select distinct Subject from chengji) as a(这句可以直接用tablename代替效果一样)
tablename
select @sql = @sql+' from chengji group by name'
print @sql
exec(@sql)
你的运行结果是姓名 语文 数学 物理 语文 数学 物理
张三 80 90 85 80 90 85
李四 85 92 82 85 92 82 我还有点不明白的地方
select @sql = @sql+' from CJ group by name'--变量赋值(串连接)
-------------------------------------------------------------
from cj group by name被单引号扩了起来,就说明它是字符串了,应该直接把' from CJ group by name'这个串连接到@sql的后面啊,而不是语文,数学,物理什么的.本人初学,有可能问的问题让人笑话,希望各位朋友帮帮忙,谢谢了!
sum函数的作用是什么呢?
但是在这个例子里,sum()是用来干什么的?
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from CJ group by Subject--这样也可
select @sql = @sql+' from CJ group by name'
exec(@sql)