| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 750 人关注过本帖
标题:继续请教统计报表的问题
只看楼主 加入收藏
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
继续请教统计报表的问题
之前,就统计报表问题发过数个帖子求助,得到多位热心朋友的解答。现在又遇到问题,再次请教:
想按企业规模进行分类统计,表(qyjbxxb.dbf)中没有设置相应字段,需要通过分析表中的zgrs(从业人员人数)和ncz(销售收入)两个字段值进行分类,我用条件选择语句写的代码如下:
程序代码:
private qygm
select qyjbxxb
do case
  case zgrs<20.and.ncz<300
      qygm='微型企业'
  case 20<=zgrs<300.and.300<=ncz<2000
  qygm='小型企业'
  case 300<=zgrs<1000.and.2000<=ncz<40000
  qygm='中型企业'
  case zgrs>=1000.and.ncz>=40000
  qygm='大型企业'
endcase
现在想用此数据代替下图中第一列的记录数据,列表头为“企业规模”,用SQL查询语句该如何实现?
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 统计 private color 
2013-03-04 12:12
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
ZGRS(职工人数)、NCZ(年产值)数据不完整,统计结果不正确。

坚守VFP最后的阵地
2013-03-04 18:28
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:20 
程序代码:
CREATE CURSOR QYGM (企业规模 C(8),人数1 I,人数2 I,产值1 I,产值2 I)
INSERT INTO QYGM VALUES ([微型企业],0,20,0,300)
INSERT INTO QYGM VALUES ([小型企业],20,300,300,2000)
INSERT INTO QYGM VALUES ([中型企业],300,1000,2000,40000)
INSERT INTO QYGM VALUES ([大型企业],1000,999999,40000,999999999)

SELECT QYGM.企业规模 企业规模,CAST(COUNT(distinct Qyzycpk.jgmc) AS N(2)) 企业数,;
  CAST(COUNT(QYZYCPK.ZYCP) AS N(2)) 产品数,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[1],1,0)) AS N(2)) 国标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[2],1,0)) AS N(2)) 行标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[3],1,0)) AS N(2)) 地标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[4],1,0)) AS N(2)) 企标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[5],1,0)) AS N(2)) 协议 ;
  FROM QYJBXXB ;
  INNER JOIN QYJJLXK ;
  ON QYJBXXB.JJLX=QYJJLXK.JJLX ;
  INNER JOIN QYZYCPK ON Qyjbxxb.jgdm = Qyzycpk.jgdm ;
  INNER JOIN QYGM ;
  ON (QYJBXXB.ZGRS>=QYGM.人数1 AND QYJBXXB.ZGRS<QYGM.人数2) AND (QYJBXXB.NCZ>=QYGM.产值1 AND QYJBXXB.NCZ<QYGM.产值2) ;
  GROUP BY QYGM.企业规模 INTO CURSOR TEMP READWRITE

INSERT INTO TEMP SELECT [合计],SUM(企业数),SUM(产品数),SUM(国标),SUM(行标),SUM(地标),SUM(企标),SUM(协议) FROM TEMP
BROWSE
自己完善数据吧

坚守VFP最后的阵地
2013-03-04 18:31
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
回复 3楼 sdta
谢谢!
之后在数据录入界面会设置相关字段值不能为空的限制。

另外,这段代码还是没弄明白:
 INNER JOIN QYJJLXK ;
  ON QYJBXXB.JJLX=QYJJLXK.JJLX ;
这里哪有用到QYJJLXK表,为什么要关联这个表呢?


[ 本帖最后由 陶然愚者 于 2013-3-5 08:01 编辑 ]
2013-03-05 07:40
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
问题解决。此段代码可以不要。谢谢S版主。完整代码如下:
程序代码:
CREATE CURSOR QYGM (企业规模 C(8),人数1 I,人数2 I,产值1 I,产值2 I)
INSERT INTO QYGM VALUES ([微型企业],0,20,0,300)
INSERT INTO QYGM VALUES ([小型企业],20,300,300,2000)
INSERT INTO QYGM VALUES ([中型企业],300,1000,2000,40000)
INSERT INTO QYGM VALUES ([大型企业],1000,999999,40000,999999999)

SELECT QYGM.企业规模 企业规模,CAST(COUNT(distinct Qyzycpk.jgmc) AS N(4)) 企业数,;
  CAST(COUNT(QYZYCPK.ZYCP) AS N(4)) 产品数,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[1],1,0)) AS N(4)) 国标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[2],1,0)) AS N(4)) 行标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[3],1,0)) AS N(4)) 地标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[4],1,0)) AS N(4)) 企标,;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[5],1,0)) AS N(4)) 协议,;
  ROUND((CAST(SUM(IIF(QYZYCPK.BZDJ=[1],1,0)) AS N(4))+CAST(SUM(IIF(QYZYCPK.BZDJ=[2],1,0)) AS N(4))+;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[3],1,0)) AS N(4))+CAST(SUM(IIF(QYZYCPK.BZDJ=[4],1,0)) AS N(4))+;
  CAST(SUM(IIF(QYZYCPK.BZDJ=[5],1,0)) AS N(4)))/(CAST(COUNT(QYZYCPK.ZYCP) AS N(4)))*100,2) 标准覆盖率 ;
  FROM QYJBXXB ;
  INNER JOIN QYZYCPK ON Qyjbxxb.jgdm = Qyzycpk.jgdm ;
  INNER JOIN QYGM ;
  ON (QYJBXXB.ZGRS>=QYGM.人数1 AND QYJBXXB.ZGRS<QYGM.人数2) AND (QYJBXXB.NCZ>=QYGM.产值1 AND QYJBXXB.NCZ<QYGM.产值2) ;
  GROUP BY QYGM.企业规模 INTO CURSOR TEMP READWRITE
INSERT INTO TEMP SELECT [合计],SUM(企业数),SUM(产品数),SUM(国标),SUM(行标),SUM(地标),SUM(企标),SUM(协议),;

 ROUND((SUM(国标)+SUM(行标)+SUM(地标)+SUM(企标)+SUM(协议))/SUM(产品数)*100,2) FROM TEMP
GO TOP
WITH THISFORM.GRID1
   .COLUMNCOUNT=FCOUNT([TEMP])
   .RECORDSOURCE=[TEMP]
   FOR I=1 TO .COLUMNCOUNT
       WITH .COLUMNS(I)
          .WIDTH=IIF(I=1,168,IIF(i=thisform.grid1.columncount,100,48))
          .HEADER1.CAPTION=FIELD(I)
          .HEADER1.ALIGNMENT=2
          .Resizable=.F.
       ENDWITH
   ENDFOR
ENDWITH
SET DATE YMD
thisform.text1.Value=date()
运行结果界面如下:
图片附件: 游客没有浏览图片的权限,请 登录注册

2013-03-05 08:31
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
此程序代码有一个缺陷,就是参与统计或计算的字段值有空值时会发生错误。
2013-03-05 08:36
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用陶然愚者在2013-3-5 07:40:57的发言:

谢谢!
之后在数据录入界面会设置相关字段值不能为空的限制。

另外,这段代码还是没弄明白: INNER JOIN QYJJLXK ;
  ON QYJBXXB.JJLX=QYJJLXK.JJLX ;
这里哪有用到QYJJLXK表,为什么要关联这个表呢?
这两行代码可以不要,是在原来的代码基础上修改的,忘了删除,不好意思了

坚守VFP最后的阵地
2013-03-05 08:43
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
以下是引用陶然愚者在2013-3-5 08:36:20的发言:

此程序代码有一个缺陷,就是参与统计或计算的字段值有空值时会发生错误。
不知你说的空值是什么意思,根据不同情况,可以处理。用NVL()处理。

坚守VFP最后的阵地
2013-03-05 08:45
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
仔细看看,还是有一个问题:“在从业人数、销售收入两个条件中有一个条件未达标时,下调一档”这个目标没有能够实现。比如其中有一个企业,人数为30人,销售收入为200万元,本应该统计到“微型企业”档,可程序运行结果是此企业没有参与统计。

按照国家统计局的统计口径要求,大、中、小型企业必须同时满足两个条件,否则下调一档;微型企业满足其中一个条件即可。

[ 本帖最后由 陶然愚者 于 2013-3-5 08:55 编辑 ]
2013-03-05 08:49
陶然愚者
Rank: 1
等 级:新手上路
帖 子:151
专家分:8
注 册:2012-12-13
收藏
得分:0 
回复 8楼 sdta
就是数据表中如经济行业、经济类型、职工人数、销售收入等参与统计的字段出现空值时,系统会提示出错。
2013-03-05 08:51
快速回复:继续请教统计报表的问题
数据加载中...
 
   



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

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