Welcome

首页 / 数据库 / SQLServer / 学习SQL语句(强大的group by与select from模式)

强大的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

declare @strSql nvarchar( 800 )
select @strSql = ""
select @strSql = @strSql + " union all " + char ( 10 ) + char ( 13 ) +
" select [stdname], """ + [name] + """ as [科目],[ " + [name] + " ] " + char ( 10 ) + char ( 13 ) +
" from [#student2] " + char ( 10 ) + char ( 13 )
from #tmpCloumns

select @strSql = substring(@strSql, 11 ,len(@strSql)) + " order by stdname,[科目] "
exec(@strsql)

以上节选自网上一些贴子的SQL代码,很早以前看到的,原链接我不知道了。