又是第一次见到的SQL查询,复杂啊,头晕了。

sharplee82 2003-12-18 08:36:55
表A内容:
学生1 学生2 学生3 学生4 学生5
科目 上学期下学期 上学期下学期 上学期 下学期 上学期 下学期 上学期下学期
语文 80 90 30 69 87 65 60 60 87 65
数学 45 43 43 98 0 5 70 70 0 5

现要
转换成表B

学生1 学生2
科目 上学期 下学期 上学期 下学期
语文 80 90 30 69
数学 45 43 43 98
语文 87 65 60 60
数学 0 5 70 70
语文 87 65
数学 0 5
也就是说A表中确定每行显示几个学生的成积后,然后然后的相应的学生的成绩要接到
记录的尾部。
...全文
44 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2003-12-18
  • 打赏
  • 举报
回复
--例子:
/*--假设有数据

科目 学生1_上学期 学生1_下学期 学生2_上学期 学生2_下学期 学生3_上学期 学生3_下学期 学生4_上学期 学生4_下学期 学生5_上学期 学生5_下学期
------ ------------ ----------- ----------- ------------ ------------ ------------ ------------ ----------- ------------ -----------
语文 80 90 30 69 87 65 60 60 87 65
数学 45 43 43 98 0 5 70 70 0 5


现要需要一个存储过程,输入每页的学生数目,得到结果,假设输入2,得到结果:
页号 科目 学生1_上学期 学生1_下学期 学生2_上学期 学生2_下学期
----------- ---------- ----------- ----------- ----------- -----------
0 语文 80 90 30 69
0 数学 45 43 43 98
1 语文 87 65 60 60
1 数学 0 5 70 70
2 语文 87 65 NULL NULL
2 数学 0 5 NULL NULL

(所影响的行数为 6 行)

--*/
create table 表A(科目 varchar(10)
,学生1_上学期 int,学生1_下学期 int
,学生2_上学期 int,学生2_下学期 int
,学生3_上学期 int,学生3_下学期 int
,学生4_上学期 int,学生4_下学期 int
,学生5_上学期 int,学生5_下学期 int)
insert into 表A
select '语文',80,90,30,69,87,65,60,60,87,65
union all select '数学',45,43,43,98,0,5,70,70,0,5
go

--处理的存储过程
create proc p_qry
@pagesize int --每页要显示的学生记录数
as
declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000)
,@i int,@j int
select @s1='',@s2='',@s3=''

select gid=cast((colid-2)/@pagesize/2 as varchar),name into #t
from syscolumns
where object_id('表A')=id and name<>'科目' order by colid
set @j=@pagesize-((@@rowcount/2) % @pagesize)

select @s1=case @i when gid then @s1 else @s1+',@'+gid+' varchar(8000)' end
,@s2=@s2+case @i when gid then '' else ' from 表A'',@'+gid+'=''select 页号='+gid+',科目' end+',['+name+']'
,@s3=case @i when gid then @s3 else @s3+'+'' union all ''+@'+gid end
,@i=gid
from #t

while @j>0
select @s2=@s2+',null,null',@j=@j-1

select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,11,8000)+' from 表A'''
,@s3='exec('+substring(@s3,16,8000)+')'

exec('declare '+@s1+'
select '+@s2+'
'+@s3)
go

--调用
exec p_qry 2
go

--测试测试环境
drop table 表A
drop proc p_qry
zjcxc 元老 2003-12-18
  • 打赏
  • 举报
回复
/*--表结构不清晰.假设表结构为:
科目 学生1_上学期 学生1_下学期 ....
--*/

--处理的存储过程
create proc p_qry
@pagesize int --每页要显示的学生记录数
as
declare @s1 varchar(8000),@s2 varchar(8000),@s3 varchar(8000)
,@i int,@j int
select @s1='',@s2='',@s3=''

select gid=cast((colid-2)/@pagesize/2 as varchar),name into #t
from syscolumns
where object_id('表A')=id and name<>'科目' order by colid
set @j=@pagesize-((@@rowcount/2) % @pagesize)

select @s1=case @i when gid then @s1 else @s1+',@'+gid+' varchar(8000)' end
,@s2=@s2+case @i when gid then '' else ' from 表A'',@'+gid+'=''select 页号='+gid+',科目' end+',['+name+']'
,@s3=case @i when gid then @s3 else @s3+'+'' union all ''+@'+gid end
,@i=gid
from #t

while @j>0
select @s2=@s2+',null,null',@j=@j-1

select @s1=substring(@s1,2,8000)
,@s2=substring(@s2,11,8000)+' from 表A'''
,@s3='exec('+substring(@s3,16,8000)+')'

exec('declare '+@s1+'
select '+@s2+'
'+@s3)
go

--调用
exec p_qry 2
go
sharplee82 2003-12-18
  • 打赏
  • 举报
回复
是一个临时表.
victorycyz 2003-12-18
  • 打赏
  • 举报
回复
A表是不是经过查询得到的视图。

我觉得最好是从原表中查询得到B表。
sharplee82 2003-12-18
  • 打赏
  • 举报
回复
希望大侠们写过存储过程,因为学生的多少是动态变化的,并不是只有上面的五个。
txlicenhe 2003-12-18
  • 打赏
  • 举报
回复
SELECT 科目,学生1上学期,学生1下学期,学生2上学期,学生2下学期
FROM
(
select 科目,学生1上学期,学生1下学期,学生2上学期,学生2下学期,1 as flag from 表
union all
select 科目,学生3上学期,学生3下学期,学生4上学期,学生4下学期,2 as flag from 表
union all
select 科目,学生5上学期,学生5下学期,NULL,NULL,3 as flag from 表
) TMP
order by flag,科目 desc



sharplee82 2003-12-18
  • 打赏
  • 举报
回复
上面表A的内容显示的时候变了样,不过大家应该知道是什么样子的:-)
我看了这一样有点类似,不知谁能后在
http://expert.csdn.net/Expert/topic/2573/2573606.xml?temp=.5021173
邹建或马可的基础上直接生成我这里的表B。真的好感谢好感谢了。
王中王羽毛球馆管理软件介绍 一、简介 王中王羽毛球馆管理软件也称【羽毛球管理软件】【羽毛球管理系统】【羽毛球馆管理系统】【羽毛球馆管理软件】【羽毛球馆收费软件】【羽毛球馆计费软件】是一套用于羽毛球馆、羽毛球场、体育馆、网球馆、台球厅等体育场馆的专业优秀的电脑收费管理系统。该系统采用先进的dotnet开发技术,结合国内先进的管理思想和管理方法,历经2年开发而成。集POS收银收费管理,场地租金分时段分场地计费管理,场地预订,会员管理,短信预定管理、灯光控制、语音交互等强大功能为一身。能够有效的杜绝管理上的漏洞,使客户和经营者的联系更加紧密减少客户的流失,大幅度降低管理工作的工作量, 降低服务员的劳动强度节约成本,使您的经营管理变得轻松简单。持卡消费真正让客户感受到球馆的档次. 本系统适合于以下场馆使用:羽毛球馆,乒乓球馆,体育馆、体育中心,网球馆,保龄球馆, 沙狐球馆, 台球馆, 高尔夫馆, 瑜伽馆 馆,武术馆馆, 泰拳道馆馆,柔道馆馆, 健身房馆,游泳馆, 溜冰场馆,篮球场馆,足球场馆, 射击场馆, 卡丁车场馆, 滑雪场馆,潜水俱乐部馆等等 下图为自定义界面全屏显示: 二、管理特色: 王中王羽毛球管理软件跟国内其他同类相比,最大的特点是采用独创的价格规则来定义场地价格,使场地价格定义方式灵活、强大、操作非常简单。可以实现任意的您能想到的优惠方案,而设置时只需要增加一条价格规则。不像其他软件,您需要对每个场地不同时间,输入不同的价格,输到你头昏。其他的特点下面依次展开论述。 2.1场地价格定义灵活方便、功能强大。 系统出厂时已经设置了定价规则。用户可以自定义定价规则。定价规则有四个要素: ? 客户 (可以指定为全部、会员、非会员、或者通过公式指定的一部分会员) ? 场地 (可以指定全部场地、一类场地,比如羽毛球场、或者其中的几片场地、一片场地) ? 时间:可以指定为全部时间,或者部分时间:比如节假日、春节、五一、十一 ? 周末,选择时间非常方便 ? 价格,支持按小时或者按次计费缺省一次是2小时,可以参数设置一次的长短 系统可以建立无数个定价规则,规则有优先级别,级别高的规则起作用,这样理论上系统可以实现无穷个价格方案,而付出的成本却是异常低廉的,这为经营者发挥营销才能 提供了物质基础。举个例子:老板说,我要实现“过生日的会员在每天下午6点到7点打球只要10元/小时”,试问国内那个软件可以实现?而我们可以轻松实现。 您也许会说,定价规则很复杂,我不会使用怎么办?您放心。定价规则可以方便导入导出,如果您不懂设置价格规则,我们可以帮助你设置,然后把价格规则发送给你,使您解除后顾之忧。同时系统里内置规则中实现了多种收费标准,您可以随意选择使用。 2.2商品折扣定义方便灵活。 商品折扣支持简单折扣和复杂折扣。 简单折扣只要定义每个商品的会员价和零售价。 复杂折扣可以根据 时间【平时,闲时,白天、晚上】 客人【所以人,会员、非会员、一部分会员】 商品【全部商品、部分商品、部分商品类别】 数量的不同而使用不同的折扣。可以方便的实现开业优惠、节日促销。 可以实现的典型的优惠方案: 开业五折优惠 购买可口可乐5瓶以上10瓶以内打8折 金卡会员晚上8点到10点购买脉动可以达8.6折。 2.3场地预定简单、方便。 系统支持临时、每日、每周三种类型的预定,每日、每周预订只要录入一次、到时间会自动显示在界面上、场地的状态图会自动显示场地已经被预订、过了预订时间后场地的状态又会自动还原。提供史上最强大的图形查询界面,可以按日、按周、按月查询预订信息。预订人可以临时取消不来,操作灵活。支持球票管理,出售球票时自动产生预订。开场时无需付款. 2.4界面美观大方全键盘操作 (不用鼠标也能操作),多达26多种皮肤,100%满足您的个性要求。 2.5强大的优惠卡管理功能。 支持四种类型的优惠卡。 按次计算的优惠卡:比如300元10次卡(每次1小时) 按时间计算的优惠卡 :比如500元20小时卡, 现金充值卡:面值1000元,售价800元,相当于打八折 包时卡:如:包打一年1000元 支持优惠卡新卡登记、优惠卡销售、优惠卡充值功能。 2.6强大的会员管理 支持会员照片、支持摄像头照相。 支持会员充值、转账 会员消费查询 会员密码,设置密码后,不用带卡也可以消费 支持会员组概念,系统提供了很多公式,可以方便快速 对会员分组,比如: 20岁以上50以下会员 积分大于1000的会员 今天过生日的会员 累计消费超过10000元的会员 余额超过5000元的会员 入会超过2年的老顾客 通过分组,可以实现复杂的收费规则,而实现起来却非常简单 会员卡支持磁卡、ID卡、IC卡、MF1卡(非接触IC卡)多种介质 目前支持深圳方卡M1读卡机,常州银联M
王中王体育馆管理软件介绍 一、简介 王中王体育馆管理软件也称【羽毛球管理软件】【羽毛球管理系统】【羽毛球馆管理系统】【羽毛球馆管理软件】【羽毛球馆收费软件】【羽毛球馆计费软件】是一套用于羽毛球馆、羽毛球场、体育馆、网球馆、台球厅等体育场馆的专业优秀的电脑收费管理系统。该系统采用先进的dotnet开发技术,结合国内先进的管理思想和管理方法,历经2年开发而成。集POS收银收费管理,场地按时计费管理,优惠卡管理,场地管理、场地预订,会员管理,等强大功能为一身。能够有效的杜绝管理上的漏洞,使客户和经营者的联系更加紧密减少客户的流失,大幅度降低管理工作的工作量, 降低服务员的劳动强度节约成本,使您的经营管理变得轻松简单。持卡消费真正让客户感受到球馆的档次 二、管理特色: 王中王羽毛球管理软件跟国内其他同类相比,最大的特点是采用独创的价格规则来定义场地价格,使场地价格定义方式灵活、强大、操作非常简单。可以实现任意的您能想到的优惠方案,而设置时只需要增加一条价格规则。不像其他软件,您需要对每个场地不同时间,输入不同的价格,输到你头昏。其他的特点下面依次展开论述。 2.1场地价格定义灵活方便、功能强大。 系统出厂时已经设置了定价规则。用户可以自定义定价规则。定价规则有四个要素: ? 客户 (可以指定为全部、会员、非会员、或者通过公式指定的一部分会员) ? 场地 (可以指定全部场地、一类场地,比如羽毛球场、或者其中的几片场地、一片场地) ? 时间:可以指定为全部时间,或者部分时间:比如节假日、春节、五一、十一 ? 周末,选择时间非常方便 ? 价格,支持按小时或者按次计费缺省一次是2小时,可以参数设置一次的长短 系统可以建立无数个定价规则,规则有优先级别,级别高的规则起作用,这样理论上系统可以实现无穷个价格方案,而付出的成本却是异常低廉的,这为经营者发挥营销才能 提供了物质基础。举个例子:老板说,我要实现“过生日的会员在每天下午6点到7点打球只要10元/小时”,试问国内那个软件可以实现?而我们可以轻松实现。 您也许会说,定价规则很复杂,我不会使用怎么办?您放心。定价规则可以方便导入导出,如果您不懂设置价格规则,我们可以帮助你设置,然后把价格规则发送给你,使您解除后顾之忧。同时系统里内置规则中实现了多种收费标准,您可以随意选择使用。 2.2场地预定简单、方便。 系统支持临时、每日、每周三种类型的预定,每日、每周预订只要录入一次、到时间会自动显示在界面上、场地的状态图会自动显示场地已经被预订、过了预订时间后场地的状态又会自动还原。 2.3界面美观大方全键盘操作 (不用鼠标也能操作),多达26多种皮肤,100%满足您的个性要求。 2.4强大的优惠卡管理功能。 支持四种类型的优惠卡。 按次计算的优惠卡:比如300元10次卡(每次1小时) 按时间计算的优惠卡 :比如500元20小时卡, 现金充值卡:面值1000元,售价800元,相当于打八折 包时卡:如:包打一年1000元 支持优惠卡新卡登记、优惠卡销售、优惠卡充值功能。 2.5强大的会员管理 支持会员照片、支持摄像头照相。 支持会员充值、转账 会员消费查询 会员密码,设置密码后,不用带卡也可以消费 支持会员组概念,系统提供了很多公式,可以方便快速 对会员分组,比如: 50岁以上会员 20岁以上50以下会员 20岁以下会员 积分大于100的会员 积分大于1000的会员 今天过生日的会员 累计消费超过10000元的会员 余额超过5000元的会员 入会超过2年的老顾客 通过分组,可以实现复杂的收费规则,而实现起来却非常简单 会员卡支持磁卡、ID卡、IC卡、MF1卡(非接触IC卡)多种介质 目前支持深圳方卡M1读卡机,常州银联M1读卡机其他类型的读卡机 在不断增加。 2.6支持POS销售商品。 支持商品的条码管理,支持入库,销售,库存等,可按照商品上的条码建立商品信息,销售时直接用条码扫描枪进行扫描,方便快速;支持LED客户显示屏,方便客户 2.7可以打印多种小票 开场单、结账单、售卡单、充值单、会员转账单。 是否打印可以参数设置 2.8定时提醒功能。 支持预订到达前30(可以设置)分钟每1(可以设置)分种提示一次 场地到时退场提醒,也支持设置提前时间,频率。 提示方式多样,会出现小老人,同时状态栏出现信息图标。 支持声音提示 2.9两种收费方式。 普通【租场后付款】 预付【租场前付款】 2.10直观的场地状态图 场地图形化,完善强大的tooltip功能 场地状态图以不同的图形显示:占用、预订、已付款、停用、空闲五种状态。 场地时序图以另外一个视角显示场地占用情况,可以清楚的看到那些场地的利用效率高、那些效率低。 自定义场地状态图,可以自己设定场地的行列位置,可以设置显示的图形(木地板还

34,871

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧