| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1627 人关注过本帖, 1 人收藏
标题:请教只将符合条件的写入到指定文件
只看楼主 加入收藏
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2197
专家分:3838
注 册:2007-4-27
收藏
得分:0 
以下是引用hgfeng1984在2015-5-25 17:25:56的发言:

分两步;
取得1~12,3个数字,4个数字,5个数字,和分别为26的组合。
3组组合再组合,过滤有重复数字的。
以前有写过1~45取6次的组合,一样的道理。但是不知道有没有漏掉的。
CLEAR ALL
SET SAFETY off
CREATE TABLE tmp(sz n)
INSERT INTO tmp(sz) VALUES (1)
INSERT INTO tmp(sz) VALUES (2)
INSERT INTO tmp(sz) VALUES (3)
INSERT INTO tmp(sz) VALUES (4)
INSERT INTO tmp(sz) VALUES (5)
INSERT INTO tmp(sz) VALUES (6)
INSERT INTO tmp(sz) VALUES (7)
INSERT INTO tmp(sz) VALUES (8)
INSERT INTO tmp(sz) VALUES (9)
INSERT INTO tmp(sz) VALUES (10)
INSERT INTO tmp(sz) VALUES (11)
INSERT INTO tmp(sz) VALUES (12)
 
 
&&获取组合
SELECT a.sz as sz1,b.sz as sz2,c.sz as sz3 FROM tmp a INNER JOIN tmp b ON a.sz
试到 获取组合 的第4句,提示出错

 能解释各语句的意思吗?谢谢

只求每天有一丁点儿的进步就可以了
2015-05-27 10:23
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:191
帖 子:3146
专家分:8408
注 册:2015-3-25
收藏
得分:0 
CLEAR ALL
 SET SAFETY off
 CREATE TABLE tmp(sz n)
 INSERT INTO tmp(sz) VALUES (1)
 INSERT INTO tmp(sz) VALUES (2)
 INSERT INTO tmp(sz) VALUES (3)
 INSERT INTO tmp(sz) VALUES (4)
 INSERT INTO tmp(sz) VALUES (5)
 INSERT INTO tmp(sz) VALUES (6)
 INSERT INTO tmp(sz) VALUES (7)
 INSERT INTO tmp(sz) VALUES (8)
 INSERT INTO tmp(sz) VALUES (9)
 INSERT INTO tmp(sz) VALUES (10)
 INSERT INTO tmp(sz) VALUES (11)
 INSERT INTO tmp(sz) VALUES (12)
 

&&获取组合
 SELECT a.sz as sz1,b.sz as sz2,c.sz as sz3 FROM tmp a INNER JOIN tmp b ON a.sz<b.sz INNER JOIN tmp c ON b.sz<c.sz WHERE a.sz+b.sz+c.sz=26 INTO CURSOR AAA
 
SELECT a.sz as sz4,b.sz as sz5,c.sz as sz6,d.sz as sz7 FROM tmp a INNER JOIN tmp b ON a.sz<b.sz INNER JOIN tmp c ON b.sz<c.sz INNER JOIN tmp d ON c.sz<d.sz WHERE a.sz+b.sz+c.sz+d.sz=26 INTO CURSOR BBB
 
SELECT a.sz as sz8,b.sz as sz9,c.sz as sz10,d.sz as sz11,e.sz as sz12 FROM tmp a INNER JOIN tmp b ON a.sz<b.sz INNER JOIN tmp c ON b.sz<c.sz INNER JOIN tmp d ON c.sz<d.sz INNER JOIN tmp e ON d.sz<e.sz WHERE a.sz+b.sz+c.sz+d.sz+e.sz=26 INTO CURSOR CCC
 
SELECT RECNO() as xh,* FROM (SELECT * FROM aaa,bbb,ccc)a INTO CURSOR ttt
 
&&过滤
 SELECT xh from(;
 SELECT xh,sz1 as sz FROM ttt;
 union all;
 SELECT xh,sz2 as sz FROM ttt;
 union all;
 SELECT xh,sz3 as sz FROM ttt;
 union all;
 SELECT xh,sz4 as sz FROM ttt;
 union all;
 SELECT xh,sz5 as sz FROM ttt;
 union all;
 SELECT xh,sz6 as sz FROM ttt;
 union all;
 SELECT xh,sz7 as sz FROM ttt;
 union all;
 SELECT xh,sz8 as sz FROM ttt;
 union all;
 SELECT xh,sz9 as sz FROM ttt;
 union all;
 SELECT xh,sz10 as sz FROM ttt;
 union all;
 SELECT xh,sz11 as sz FROM ttt;
 union all;
 SELECT xh,sz12 as sz FROM ttt)a GROUP BY xh,sz HAVING COUNT(*)>=2 INTO CURSOR zzz
 
SELECT sz1,sz2,sz3,sz4,sz5,sz6,sz7,sz8,sz9,sz10,sz11,sz12 FROM ttt a WHERE a.xh NOT in(SELECT xh FROM zzz)
*他这没问题,我在VPF9.0测试通过的,但就不知道原理。。
2015-05-27 11:46
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:109
帖 子:2197
专家分:3838
注 册:2007-4-27
收藏
得分:0 
我用的是8.0的

只求每天有一丁点儿的进步就可以了
2015-05-27 12:32
hgfeng1984
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:5
帖 子:139
专家分:513
注 册:2006-3-26
收藏
得分:0 
假设从5个球中(1,2,3,4,5),取出2个球(同一球不可从复取,取出1,2等同取2,1),那么有几种情况?
应该就如下图所示:
图片附件: 游客没有浏览图片的权限,请 登录注册

图1

而这个过程可以用对应的SQL来处理(#tmp表有5条记录,1-5):
select a.sz as sz1,b.sz as sz2 from #tmp a inner join #tmp b on a.sz<b.sz order by sz1,sz2
图片附件: 游客没有浏览图片的权限,请 登录注册

图2

取两个球就是表#tmp自连接一次,连接条件是表a(#tmp表别名)的sz小于表b(#tmp表别名)的sz,可以看到对应的查询结果其实就如上图2的一个过程。
这样楼主的问题就可以分为1-12的数字,取3,4,5次,即从复以上过程3次,条件为和为26的记录。

这样取得3个表后,再将这3个表连接一次(表ttt)。
SELECT RECNO() as xh,* FROM (SELECT * FROM aaa,bbb,ccc)a INTO CURSOR ttt

而连接后得到的表ttt,因为每次都是从1-12这12个数字中取得,所以势必存在重复取出同一号码的情况,要过滤。

重复的意思就是一条记录(一行),某个数字存在2次以上,因为一行只有12列,我们可以记录下行号(记录号),把行转换为列,按行号及数字来分组统计,
如果某个行号的数字,统计超过2次的那就表示数字存在重复,要将我们前面取得的表ttt里剔除这些记录号,剩下的就是我们要的结果。

SELECT xh from(;
SELECT xh,sz1 as sz FROM ttt;
union all......

SELECT sz1,sz2,sz3,sz4,sz5,sz6,sz7,sz8,sz9,sz10,sz11,sz12 FROM ttt a WHERE a.xh NOT in(SELECT xh FROM zzz)

大概就是这样了。
2015-05-27 12:33
快速回复:请教只将符合条件的写入到指定文件
数据加载中...
 
   



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

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