学习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代码,很早以前看到的,原链接我不知道了 。