| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3584 人关注过本帖
标题:一个查询,整了一个下午没有弄出来,现请教大师
只看楼主 加入收藏
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:766
专家分:2517
注 册:2011-5-8
收藏
得分:0 
回复 20楼 sdta
这样不保险,他的要求是。同一分组中,扎帐取最大值,库存取同一记录号对应库存值。

dBase有人接盘了。
2019-05-10 22:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
SYS(3099,70)
select 单位, 品种, 扎帐, 库存, sum(销售) 销售 from 表1 WHERE 扎帐 in (SELECT MAX(扎帐) FROM 表1 group by 单位, 品种, 扎帐) group by 单位, 品种

坚守VFP最后的阵地
2019-05-10 23:24
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:694
专家分:20
注 册:2014-1-16
收藏
得分:0 
非常感谢各位师傅的解答,sdta师傅的建议可以采纳,我自己想了一个思路,就是把查询分2段完成,但是结果却不正确,是怎么回事?
图片附件: 游客没有浏览图片的权限,请 登录注册
2019-05-11 06:35
schtg
Rank: 12Rank: 12Rank: 12
来 自:Usa
等 级:贵宾
威 望:67
帖 子:1738
专家分:3329
注 册:2012-2-29
收藏
得分:0 
回复 23楼 fanjinyu9108
建议按照常规思路进行处理,我没有数据测试,请你试一试,主要检验我的理解是否正确。
select 单位, 品种,sum(销售) as 销售 From 表1 group by 单位, 品种 into table A
SELECT 单位, 品种,MAX(扎帐) as 扎帐 FROM 表1  group by 单位, 品种  into table B
SELECT yb.单位,yb.品种,yb.扎帐,yb.库存 FROM 表1 yb,B WHERE ALLTRIM(yb.单位)==ALLTRIM(B.单位) AND ALLTRIM(yb.品种)==ALLTRIM(B.品种) AND yb.扎帐=B.扎帐 into ytable C
SELECT C.单位,C.品种,C.扎帐,C.库存,A.销售 FROM C,A WHERE ALLTRIM(C.单位)==ALLTRIM(A.单位) AND ALLTRIM(C.品种)==ALLTRIM(A.品种) INTO TABLE 结果表
图片附件: 游客没有浏览图片的权限,请 登录注册

*|* 主要是你不希望用到sys(3099,70)设为vfp6,运行完程序后,再用sys(3099,90)回到vfp9。
*|* 以上思路仅供参考,可用你的那一万多条数据测试、校验哈。
*|* 当然,上述语句还可以精简、优化的

[此贴子已经被作者于2019-5-11 08:03编辑过]

2019-05-11 07:56
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:766
专家分:2517
注 册:2011-5-8
收藏
得分:0 
不知道你管理的是什么,如果库存有上限,可用以下语句,似乎与VFP的版本无关。
select 单位, 品种, MAX(扎帐) 扎帐, max(扎帐*1000000+库存)-MAX(扎帐)*1000000 库存, sum(销售) 销售 from 表1 group by 单位, 品种

 max(扎帐*1000000+库存)-MAX(扎帐)*1000000目的是取得最大扎帐对应的库存。根据库存上限的大小可以修改1000000的值,只要大于库存可能的上限就可以了。
另外,如果不想通过代码实现你的目的;建议你用视图。如果一个视图不行可以用视图的视图。

dBase有人接盘了。
2019-05-11 10:47
sash
Rank: 4
等 级:业余侠客
威 望:6
帖 子:65
专家分:249
注 册:2014-4-25
收藏
得分:4 
楼主,对于你的要求只要以下3句语句就可以完成:
SELECT 单位,品种,MAX(扎帐) AS 扎帐 FROM 表1 GROUP BY 单位,品种 INTO CURSOR tmp1
SELECT 单位,品种,SUM(销售) AS 销售 FROM 表1 GROUP BY 单位,品种 INTO CURSOR tmp2
SELECT b.*,a.库存,c.销售 FROM 表1 a INNER JOIN tmp1 b ON a.单位=b.单位 AND a.品种=b.品种 AND a.扎帐=b.扎帐 INNER JOIN tmp2 c ON a.单位=c.单位 AND a.品种=c.品种  INTO CURSOR tmp3
以上3句语句可以保证数据准确,对于SQL语句VFP9.0的语法是最严谨的,千万不要使用兼用版本的语句,因为有可能出现错误结果。

如果你是用VFP9.0那么以下一句语句就行:
SELECT b.*,a.库存,c.销售 ;
  FROM 表1 a ;
 INNER JOIN (SELECT 单位,品种,MAX(扎帐) AS 扎帐 FROM 表1 a GROUP BY 单位,品种) b ON a.单位=b.单位 AND a.品种=b.品种 AND a.扎帐=b.扎帐 ;
 INNER JOIN (SELECT 单位,品种,SUM(销售) AS 销售 FROM 表1 GROUP BY 单位,品种) c ON a.单位=c.单位 AND a.品种=c.品种 ;
 INTO CURSOR tmptmp

VFP9.0以前的版本,可以使用一些非标SQL的语句,但是VFP9.0版本使用的是标准的SQL语句,避免了非标语句的不严谨问题。所以,如果你用的是VFP9.0,建议你使用标准的SQL语句,这种标准语句在SQL SERVER也是通用的(即VFP9.0中能用,SQL SERVER中也能用)。

[此贴子已经被作者于2019-5-11 17:20编辑过]

2019-05-11 16:46
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:694
专家分:20
注 册:2014-1-16
收藏
得分:0 
非常感谢sash师傅的解答,我决定采用您的方案,也再次感谢论坛师傅的热情解答。
2019-05-11 17:47
fanjinyu9108
Rank: 2
等 级:论坛游民
帖 子:694
专家分:20
注 册:2014-1-16
收藏
得分:0 
很惭愧,单位最近有程序编写任务,可能还会遇到诸多问题,烦请各位师傅予以指点。
2019-05-11 17:58
快速回复:一个查询,整了一个下午没有弄出来,现请教大师
数据加载中...
 
   



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

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