一个表的问题
表一:
--------------------------------------------------------
姓名 学号 科目名称 科目分数 班级名称
张三 2003001 网页设计 95 2002级计算机一班
张三 2003001 数据结构 76 2002级计算机一班
李四 2003002 数据结构 65 2002级计算机二班
李四 2003002 网页设计 65 2002级计算机二班
王五 2003003 英语 70 2002级计算机一班
李四 2003002 英语 75 2002级计算机二班
张三 2003001 英语 46 2002级计算机一班
王五 2003003 网页设计 78 2002级计算机一班
---------------------------------------------------------
欲把表一转为下面形式
--------------------------------------------------------
姓名 学号 科目名称 科目分数 科目名称 科目分数 科目名称 科目分数 班级名称 总分 排名
张三 2003001 网页设计 95 数据结构 76 英语 46 2002级计算机一班 217 1
李四 2003002 网页设计 65 数据结构 65 英语 75 2002级计算机二班 205 2
王五 2003003 网页设计 78 NULL MULL 英语 70 2002级计算机一班 148 3
-----------------------------------------------------------
已实现动态语句在查询分析器中实现
set nocount on
create table #tmp( 姓名 nvarchar(50),学号 nvarchar(50),科目名称 nvarchar(50),科目分数 INT,班级名称 nvarchar(50))
insert into #tmp
select * from 表一
DECLARE @SQL VARCHAR(8000)
SET @SQL='SELECT 姓名,学号,班级名称'
SELECT @SQL= @SQL+
',MIN(CASE WHEN 科目名称 = ''' + 科目名称 + ''' THEN 科目分数 END) [' + 科目名称 + ']'
FROM (SELECT DISTINCT 科目名称 FROM #tmp) A
SET @SQL=@SQL+',sum(科目分数) as 总分 FROM #tmp GROUP BY 姓名,学号,班级名称 order by 总分 desc'
exec (@SQL)
drop table #tmp
------------------------------
现想把已实现的第二种格式保存为另一张表二 且表二随表一的数据而更新
请教实现的语句(包括保存更新) 感谢!
问题点数:50、回复次数:3Top
1 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-05-04 11:47:13 得分 0
--将动态SQL语句放在存储过程中,直接使用存储过程返回的数据集,没有必要单独存放一张表
create procedure dbo.sp_test
as
declare @sql varchar(8000)
set @sql='select 姓名,学号,班级名称'
select @sql= @sql+ ',min(case when 科目名称 = ''' + 科目名称 + ''' then 科目分数 end) [' + 科目名称 + ']'
from (select distinct 科目名称 from 表一) a
set @sql=@sql+',sum(科目分数) as 总分 from 表一 group by 姓名,学号,班级名称 order by 总分 desc'
exec (@sql)
go
--直接使用存储过程返回的数据集
select * from openrowset('sqloledb','Trusted_Connection=yes','exec pubs.dbo.sp_test')
drop proc sp_test
go
Top
2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-05-04 11:48:04 得分 0
--改:
--将动态SQL语句放在存储过程中,直接使用存储过程返回的数据集,没有必要单独存放一张表
create procedure dbo.sp_test
as
declare @sql varchar(8000)
set @sql='select 姓名,学号,班级名称'
select @sql= @sql+ ',min(case when 科目名称 = ''' + 科目名称 + ''' then 科目分数 end) [' + 科目名称 + ']'
from (select distinct 科目名称 from 表一) a
set @sql=@sql+',sum(科目分数) as 总分 from 表一 group by 姓名,学号,班级名称 order by 总分 desc'
exec (@sql)
go
--直接使用存储过程返回的数据集
select * from openrowset('sqloledb','Trusted_Connection=yes','exec 数据库名.dbo.sp_test')
drop proc sp_test
go
Top
3 楼tieying830616()回复于 2006-05-04 11:56:44 得分 0
我想在一编辑页面控件中读取显示表二格式中内容
不新建一张表不知道怎样读取啊?Top




