首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

求sql 原理,该怎么处理

2012-03-13 
求sql 原理Name Subject Result张三 语文 80张三 数学 90张三 物理 85李四 语文 85李四 数学 92李四 物理

求sql 原理
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82


实现结果
姓名 语文 数学 物理  
张三 80 90 85
李四 85 92 82

第一种
declare @sql varchar(8000)
select @sql = 'select Name, max(case Subject when ''' + Subject+ ''' then Result else 0 end) [' + Subject+ ']'
from (select distinct Subject from cj) as a
set @sql = @sql + ' from cj group by Name'
print @sql

第二种
declare @sql1 varchar(8000)
set @sql1 = 'select Name'
select @sql1 = @sql1+', max(case Subject when ''' + Subject+ ''' then Result else 0 end) [' + Subject+ ']'
from (select distinct Subject from cj) as a
set @sql1 = @sql1 + ' from cj group by Name'
print @sql1

为什么第二种方法可以 第一种不可以 能讲下原理吗 我不太清楚 希望越细越好 谢谢!!!

[解决办法]

SQL code
declare @sql varchar(8000)set @sql=''--赋值,否则为nullselect @sql = 'select Name, max(case Subject when ''' + Subject+ ''' then Result else 0 end) [' + Subject+ ']'from (select distinct Subject from cj) as aset @sql = @sql + ' from cj group by Name'print @sql
[解决办法]
第一种@sql 没有初始值,null 加任何值还是null
[解决办法]

SQL code
把你的打印出来就是如下。select Name, max(case Subject when '语文' then Result else 0 end) [语文] from cj group by Nameselect Name, max(case Subject when '数学' then Result else 0 end) [数学],max(case Subject when '物理' then Result else 0 end) [物理],max(case Subject when '语文' then Result else 0 end) [语文] from tb group by Name 就是想问这两列的区别,。  你是想把列中的值 '数学' '物理' '语文' 的都单独作为一个列  当然要三个列了、
[解决办法]
把初始化下就行

热点排行