初学者:解释一下SQL语句
刚刚学习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)
有些地方看不懂,能不能详细讲解一下这个执行语句.谢谢了
------解决方案--------------------declare @sql varchar(4000)--声明变量
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)打印出结果就更明白了
------解决方案--------------------你用PRINT @sql
打印出来就一目了然了!
------解决方案--------------------print @sql 打印出来看看就明白了.
------解决方案--------------------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 chengji) as a(这句可以直接用tablename代替效果一样)
tablename
select @sql = @sql+ ' from chengji group by name '
print @sql
exec(@sql)
------解决方案--------------------明明可以用SELECT建一个临时表插入再UPDATE的,搞那么麻烦
------解决方案--------------------declare @sql varchar(4000)
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)