强大的group by 复制代码 代码如下: select stdname, isnull(sum( case stdsubject when " 化学 " then Result end), 0 ) [化学], isnull(sum( case stdsubject when " 数学 " then Result end), 0 ) [数学], isnull(sum( case stdsubject when " 物理 " then Result end), 0 ) [物理], isnull(sum( case stdsubject when " 语文 " then Result end), 0 ) [语文] from #student group by stdname
group by与sum + case结合,可以将表1中的记录(行)变成表2的字段(列)。Sum里面如果没有case,那么出来的值,只能是全部科目的总和,用了case以后,就是某科的成绩;然后这里用了好几个sum,每个科目一个sum,于是表1中本来某人某科占一条记录的“行”就变成了表2里某人一条记录,每科做一个字段了
利用select from (select from)的模式生成SQL语句 复制代码 代码如下: declare @sql varchar( 4000 ) set @sql = " select stdname " select @sql = @sql + " ,isnull(sum(case stdsubject when """ + stdsubject + """ then Result end),0) [ " + stdsubject + " ] " from (select distinct stdsubject from #student) as a select @sql = @sql + " from #student group by stdname " print @sql exec(@sql)
复制代码 代码如下: select [name] into #tmpCloumns from tempdb.dbo.syscolumns where id = object_id( " tempdb.dbo.#student2 " ) and [name] <> " stdname " select * from #tmpCloumns