declare @s varchar(8000),@i int
select @s='',@i=0
select @i=@i+1
,@s=@s+case
when @i=201 then ',其他=sum(case when 科目 in('''+科目+''''
when @i>201 then ','''+科目+''''
else ',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
end
from 表
group by 科目
if @i>200 set @s=@s+') then 成绩 else 0 end)'
exec('select 學號'+@s+' from 表 group by 學號')
select @s='',@i=0
select @i=@i+1
,@s=@s+case
when @i=201 then ',其他=sum(case when 科目 in('''+科目+''''
when @i>201 then ','''+科目+''''
else ',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
end
from 表
group by 科目
if @i>200 set @s=@s+') then 成绩 else 0 end)'
exec('select 學號'+@s+' from 表 group by 學號')
解决方案 »
- 请教数据库主外键关系表设计问题
- 一个小问题,望指教
- 语句“select cursor(select ...) c from ...” 从oracle到sql server的转换
- 英文操作系统下,英文版数据库如MSSQL,怎样可以同时保存中文和英文的数据内容?
- 如何将 TXT 文本的内容导入数据库? 急!
- 自动安装数据库(.mdf/.ldf)问题
- 查询速度(2)
- 一个系统安全的问题!
- :为什么ASP在执行存储过程时出现错误??::?????
- 求助:sql如何对多表进行不同条件的查询汇总,需求详见附件。
- sql server远程连接突然连不上了,本来是好好的.
- 大家讨论 很难相信MS的全文索引这么烂!!!?
declare @s varchar(8000)
set @s=''
select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from 表 group by 科目
exec('select 學號'+@s+' from 表 group by 學號')
得出結果:
學號 語文 數學 英語 物理 歷史 政治 化學 体育 ......
1 80 0 90 80 0 78 0 75 ......
2 58 80 0 85 94 0 87 0 ......
表的字段數目是未知,要將此數据插入到一個臨時表中,需要怎樣創建那個臨時表?
set @s=''
select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
from 表 group by 科目
exec('select 學號'+@s+' into ##t from 表 group by 學號')
select * from ##t
drop table ##t