| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1282 人关注过本帖
标题:sql 生成的交叉表 如何转成vfp程序
只看楼主 加入收藏
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
结帖率:100%
收藏
 问题点数:0 回复次数:5 
sql 生成的交叉表 如何转成vfp程序

在mysql论坛看到以下程序,虽然我能用sele sum(iif(subject="语文",result,0) as 语文,。。。做出他的效果,但如果subject多的话就要写N条,太累了,不如此程序来得简洁,但不知如何能用vfp编出,特来请高手赐教。
假设有张学生成绩表(CJ)如下
Name Subject Result
张三 语文 80
张三 数学 90
张三 物理 85
李四 语文 85
李四 数学 92
李四 物理 82

想变成
姓名 语文 数学 物理
张三 80 90 85
李四 85 92 82

declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)

搜索更多相关主题的帖子: vfp sql 交叉 
2006-11-11 16:38
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
查了半天的资料,都是用sql的存储进程来解决的,vfp能实现这种动态的查询吗?
2006-11-11 17:56
fown
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:58
帖 子:1229
专家分:171
注 册:2005-5-26
收藏
得分:0 

用SELECT加IIF是最好的办法了吧


有人说VFP不行了,我想说,你连VFP十分之一的功能都不会用,你怎么知道VFP不行?本人拒绝回答学生的问题我回答问题一般情况下只提供思路不提供代码,请理解
2006-11-11 19:24
Tiger5392
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:88
帖 子:2775
专家分:2237
注 册:2006-5-17
收藏
得分:0 

*!* sql生成的交叉表,如何转成vfp程序
*!* 在mysql论坛看到以下程序,
*!* 虽然我能用sele sum(iif(subject="语文",result,0) as 语文,。。。
*!* 做出他的效果,
*!* 但如果subject多的话就要写N条,太累了,
*!* 不如此程序来得简洁,
*!* 但不知如何能用vfp编出,
*!* 特来请高手赐教。
*!* 假设有张学生成绩表(CJ)如下
*!* Name Subject Result
*!* 张三 语文 80
*!* 张三 数学 90
*!* 张三 物理 85
*!* 李四 语文 85
*!* 李四 数学 92
*!* 李四 物理 82

*!* 想变成
*!* 姓名 语文 数学 物理
*!* 张三 80 90 85
*!* 李四 85 92 82

*!* declare @sql varchar(4000)
*!* set @sql = 'select Name'
*!* select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
*!* from (select distinct Subject from CJ) as a
*!* select @sql = @sql+' from test group by name'
*!* exec(@sql)

SET TALK OFF
SET SAFETY OFF
CLOSE ALL
IF FILE("CJ.DBF")
USE CJ.DBF
ELSE
CREATE TABLE CJ (姓名 C(8),科目 C(8),成绩 N(3))
INSERT INTO CJ (姓名,科目,成绩) VALUES ("张三","语文",80)
INSERT INTO CJ (姓名,科目,成绩) VALUES ("张三","数学",90)
INSERT INTO CJ (姓名,科目,成绩) VALUES ("张三","物理",85)
INSERT INTO CJ (姓名,科目,成绩) VALUES ("李四","语文",85)
INSERT INTO CJ (姓名,科目,成绩) VALUES ("李四","数学",92)
INSERT INTO CJ (姓名,科目,成绩) VALUES ("李四","物理",82)
ENDIF
cExpr="姓名 C(8)"
INDEX ON 科目 TO KM UNIQUE
GO TOP
DO WHILE !EOF()
cExpr=cExpr+","+ALLTRIM(科目)+" N(3)"
SKIP
ENDDO
SELECT 2
CREATE TABLE 成绩 ( &cExpr. )
SELECT 1
SET INDEX TO
GO TOP
DO WHILE !EOF()
cFileName=ALLTRIM(科目)
SELECT 2
LOCATE ALL FOR 姓名=A.姓名
IF EOF()
APPEND BLANK
REPLACE 姓名 WITH A.姓名
ENDIF
REPLACE &cFileName WITH A.成绩
SELECT 1
SKIP
ENDDO
SELECT 2
BROWSE
CLOSE ALL


感言:学以致用。 博客:http://www./blog/user14/65009/index.shtml email:Tiger5392@
2006-11-13 08:54
reedwu
Rank: 1
等 级:新手上路
威 望:1
帖 子:113
专家分:5
注 册:2006-9-23
收藏
得分:0 
牛啊,测试通过
2006-11-13 10:02
fown
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:58
帖 子:1229
专家分:171
注 册:2005-5-26
收藏
得分:0 
不太好吧,如果做网络程序的话,用IIF是最好不过的了

有人说VFP不行了,我想说,你连VFP十分之一的功能都不会用,你怎么知道VFP不行?本人拒绝回答学生的问题我回答问题一般情况下只提供思路不提供代码,请理解
2006-11-15 22:29
快速回复:sql 生成的交叉表 如何转成vfp程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014804 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved