| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1637 人关注过本帖
标题:请教各位大大一个从子表向父表抽数据的统计问题
只看楼主 加入收藏
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
结帖率:90%
收藏
已结贴  问题点数:20 回复次数:9 
请教各位大大一个从子表向父表抽数据的统计问题
数据与要求,如图:(VFP9环境)

图片附件: 游客没有浏览图片的权限,请 登录注册


SELECT 单位号,明细表.流水号,SUM(IIF(类型一,1,0)) as 类型一统计,SUM(IIF(类型二,1,0)) as 类型二统计;
FROM 明细表 JOIN 主表 ;
ON 明细表.流水号=主表.流水号 ;
GROUP BY 单位号,明细表.流水号
搜索更多相关主题的帖子: 统计 
2017-01-16 13:39
tlliqi
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:204
帖 子:15453
专家分:65956
注 册:2006-4-27
收藏
得分:0 
什么问题?结果不对还是语句有问题?
2017-01-16 14:18
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
回复 2楼 tlliqi
结果不对哦
2017-01-16 14:32
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
以下是引用tlliqi在2017-1-16 14:18:38的发言:

什么问题?结果不对还是语句有问题?


表明细(第15、16)的两人,都是D03这个单位的,统计时应该按单位统计,当一人就行
2017-01-16 14:36
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10540
专家分:42927
注 册:2014-5-20
收藏
得分:0 
中间统计数少了一个记录:
003  D03 1 1

图片附件: 游客没有浏览图片的权限,请 登录注册


CREATE CURSOR 表统计 (单位号 C(3), 类型一统计 I, 类型二统计 I)
INDEX on 单位号 TAG 单位号
CREATE CURSOR 表头 (流水号 C(3), 类型一 L, 类型二 L)
INSERT INTO 表头 VALUES ("001", .T., .F.)
INSERT INTO 表头 VALUES ("002", .F., .T.)
INSERT INTO 表头 VALUES ("003", .T., .T.)
INSERT INTO 表头 VALUES ("004", .F., .T.)
INDEX on 流水号 TAG 流水号
CREATE CURSOR 表明细 (流水号 C(3), 单位号 C(3), 姓名 C(10))
INSERT INTO 表明细 VALUES ("001", "D01", "甲一")
INSERT INTO 表明细 VALUES ("002", "D01", "甲一")
INSERT INTO 表明细 VALUES ("002", "D02", "乙一")
INSERT INTO 表明细 VALUES ("003", "D03", "丙一")
INSERT INTO 表明细 VALUES ("003", "D03", "丙二")
INSERT INTO 表明细 VALUES ("003", "D02", "乙二")
INSERT INTO 表明细 VALUES ("004", "D01", "甲二")
INSERT INTO 表明细 VALUES ("004", "D03", "丙三")
SET RELATION TO 流水号 INTO "表头", 单位号 INTO "表统计"
SCAN
    IF !FOUND("表统计")
        INSERT INTO 表统计 VALUES (表明细.单位号, 0, 0)
    ENDIF
    REPLACE 表统计.类型一统计 WITH 表统计.类型一统计 + IIF(表头.类型一, 1, 0),;
            表统计.类型二统计 WITH 表统计.类型二统计 + IIF(表头.类型二, 1, 0)
ENDSCAN
SET RELATION TO
SELECT 表统计
BROWSE
2017-01-16 14:52
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10540
专家分:42927
注 册:2014-5-20
收藏
得分:20 
以下是引用shonken在2017-1-16 14:36:54的发言:



表明细(第15、16)的两人,都是D03这个单位的,统计时应该按单位统计,当一人就行

意思是按“流水号+单位号”唯一统计
图片附件: 游客没有浏览图片的权限,请 登录注册

CREATE CURSOR 表统计 (单位号 C(3), 类型一统计 I, 类型二统计 I)
INDEX on 单位号 TAG 单位号
CREATE CURSOR 表头 (流水号 C(3), 类型一 L, 类型二 L)
INSERT INTO 表头 VALUES ("001", .T., .F.)
INSERT INTO 表头 VALUES ("002", .F., .T.)
INSERT INTO 表头 VALUES ("003", .T., .T.)
INSERT INTO 表头 VALUES ("004", .F., .T.)
INDEX on 流水号 TAG 流水号
CREATE CURSOR 表明细 (流水号 C(3), 单位号 C(3), 姓名 C(10))
INSERT INTO 表明细 VALUES ("001", "D01", "甲一")
INSERT INTO 表明细 VALUES ("002", "D01", "甲一")
INSERT INTO 表明细 VALUES ("002", "D02", "乙一")
INSERT INTO 表明细 VALUES ("003", "D03", "丙一")
INSERT INTO 表明细 VALUES ("003", "D03", "丙二")
INSERT INTO 表明细 VALUES ("003", "D02", "乙二")
INSERT INTO 表明细 VALUES ("004", "D01", "甲二")
INSERT INTO 表明细 VALUES ("004", "D03", "丙三")
INDEX on 流水号+单位号 TAG 流水单位号 UNIQUE
SET RELATION TO 流水号 INTO "表头", 单位号 INTO "表统计"
SCAN
    IF !FOUND("表统计")
        INSERT INTO 表统计 VALUES (表明细.单位号, 0, 0)
    ENDIF
    REPLACE 表统计.类型一统计 WITH 表统计.类型一统计 + IIF(表头.类型一, 1, 0),;
            表统计.类型二统计 WITH 表统计.类型二统计 + IIF(表头.类型二, 1, 0)
ENDSCAN
SET RELATION TO
SELECT 表统计
BROWSE
2017-01-16 15:03
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
回复 6楼 吹水佬
非常感谢你的解答,写了好多代码,但这不是我需要的结果

贴图左边的两个表是数据例子,我并不需要用代码填这个表出来

我需要根据左边两个表的数据,然后用select语句统计出:某单位号在所有流水号里类型一,类型二出现的次数,相同单位号的不同人视为一次
2017-01-16 18:28
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10540
专家分:42927
注 册:2014-5-20
收藏
得分:0 
回复 7楼 shonken
你了解select语句的内部运作吗?她并不一定是想象中的一句顶一万句,或者是由一万句顶起的一句。
2017-01-16 19:55
shonken
Rank: 2
等 级:论坛游民
帖 子:116
专家分:26
注 册:2017-1-15
收藏
得分:0 
回复 8楼 吹水佬
谢谢你的帮忙解答,试了一下可以实现结果

放下VFP近十年,最近有点东西想实现,发现从VFP6到VFP9,有些功能还有点不同
2017-01-17 09:32
sash
Rank: 4
等 级:业余侠客
威 望:6
帖 子:64
专家分:245
注 册:2014-4-25
收藏
得分:0 
只要有一句SELECT语句就可以实现楼主的要求:
CREATE CURSOR 表头 (流水号 C(3), 类型一 L, 类型二 L)
INSERT INTO 表头 VALUES ("001", .T., .F.)
INSERT INTO 表头 VALUES ("002", .F., .T.)
INSERT INTO 表头 VALUES ("003", .T., .T.)
INSERT INTO 表头 VALUES ("004", .F., .T.)
CREATE CURSOR 表明细 (流水号 C(3), 单位号 C(3), 姓名 C(10))
INSERT INTO 表明细 VALUES ("001", "D01", "甲一")
INSERT INTO 表明细 VALUES ("002", "D01", "甲一")
INSERT INTO 表明细 VALUES ("002", "D02", "乙一")
INSERT INTO 表明细 VALUES ("003", "D03", "丙一")
INSERT INTO 表明细 VALUES ("003", "D03", "丙二")
INSERT INTO 表明细 VALUES ("003", "D02", "乙二")
INSERT INTO 表明细 VALUES ("004", "D01", "甲二")
INSERT INTO 表明细 VALUES ("004", "D03", "丙三")

SELECT 单位号,SUM(类型一统计) AS 类型一统计,SUM(类型二统计) AS 类型二统计 ;
  FROM ( SELECT *,IIF(类型一=.t.,1,0) AS 类型一统计,IIF(类型二=.t.,1,0) AS 类型二统计 FROM 表头 a INNER JOIN 表明细 b ON a.流水号=b.流水号) tmp ;
 GROUP BY 单位号 ;
 INTO CURSOR 表统计
 
BROWSE
2017-02-12 13:00
快速回复:请教各位大大一个从子表向父表抽数据的统计问题
数据加载中...
 
   



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

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