注册 登录
编程论坛 VFP论坛

如何对相同id号的记录值进行求和汇总

独木星空 发布于 2021-11-29 15:55, 2462 次点击
如何对相同id号的记录值进行求和汇总,问题是这样的,一个dbf表,里边有两个字段,其中一个字段是"自然数"(字段名),它们中的值有重复;另外一个字段名为:"方法数"。
     我的问题是想把自然数(id值相同的)汇总到一起,即把相同“自然数”对应的“方法数”进行求和运算,合并“自然数”这个字段。
自然数  方法数
10        2
11        3
14        2
15        1
16        2
10        3
14        5
16        3
15        2
.....
.....
大概就这么个表,
形成结果
自然数   方法数
10        5
11        3
14        7
15        3
16        5
即可
里边,自然数种类不定。
现在把所要处理表发上来:
文件有点大,在下载频道有,我变通一下在传上来(取部分数据,只要解决问题就可)
17 回复
#2
独木星空2021-11-29 16:12
回复 楼主 独木星空
已把所用到的表传至:下载频道,搜索:自然数,二元运算,整数拆分, 都可搜索到,表名:自然数二元运算结果表。
#3
HUXINGKE2021-11-29 16:52
USE dbf表 EXCL
INDE ON 自然数 TAG X1
TOTAL ON 自然数 TO dbf表1 FIEL 方法数
USE dbf表1
BROW
试试看
#4
瓜瓜19902021-11-29 17:47
sele 自然数,sum(方法数) as 方法数 from 表名 group by 自然数
#5
独木星空2021-11-29 18:39
回复 4楼 瓜瓜1990
sele 自然数,sum(方法数) as 方法数 from 自然数二元运算结果表 group by 自然数   into dbf d:\自然数相同记录求和
用此语句解决了问题。
#6
独木星空2021-11-29 18:49
SELECT  1
USE D:\连续整数方程\相同记录数1至4.DBF ALIAS 相同记录1至4
SELECT  2
USE D:\连续整数方程\相同记录数5加6.DBF ALIAS 相同记录56
SELECT  3
USE D:\连续整数方程\自然数二元运算结果表.DBF ALIAS 自然数二元运算
kssj=SECONDS()
 

          SELECT  2
          GO 1
          For j=1 to 4300
          @ 15,22 say j
          A=自然数
          B=相同记录数
              SELECT 3
             INSERT INTO 自然数二元运算 (自然数,方法数) SELECT 自然数+A ,方法数*B FROM 相同记录1至4
          SELECT 2
          SKIP
          ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#7
独木星空2021-11-29 21:04
回复 3楼 HUXINGKE
USE d:\连续整数方程\自然数二元运算结果表 EXCL
INDE ON 自然数 TAG X1
TOTAL ON 自然数 TO d:\连续整数方程\自然数相同记录汇总 FIEL 方法数
USE 自然数相同记录汇总
BROW
也实现了最终目的
不知是什么原因,两种方法汇总的结果,记录条数不一样,一个是8622条(本方法),另外一个是8620条记录,正确结果,应该是连续自然数,从21到8640,应该是是8620条记录才正确。除非上边有空记录,或重复记录。
#8
独木星空2021-11-30 07:36
CLOSE DATA
USE d:\连续整数方程\自然数周期表.dbf && 设源表的名称为"表1"
P=''
FOR K=1 TO FCOUNT()
P=P+IIF(EMPTY(P),'',',')+FIELDS(K)&& 取得表中所有字段名称,放在P中
ENDFOR

SELECT *,COUNT(FIELDS(1)) AS 相同记录数 FROM DBF() GROUP BY &P. INTO DBF d:\连续整数方程\相同记录数自然数汇总3 && 取得各记录的相同记录数及其各字段值
SELECT * FROM DBF() WHERE 相同记录数>1 && 该查询结果详细列举了表1中各重复记录的 重复数
USE IN   相同记录数自然数汇总3
这是单字段的汇总
#9
独木星空2021-12-01 20:26
SELECT  1
USE D:\连续整数方程\三生素数正1.DBF ALIAS 三生正1
SELECT  2
USE D:\连续整数方程\三生素数正2.DBF ALIAS 三生正2
SELECT  3
USE D:\连续整数方程\三生素数二元运算表.DBF ALIAS 三生二元表
kssj=SECONDS()
 
          SELECT  2
          GO 1
          For j=1 to 1609
          @ 15,22 say j
          B=三中24
         
             SELECT 3
             INSERT INTO 三生二元表 (合成数) SELECT 三中24+B FROM 三生正1
          SELECT  2
          SKIP
          ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是三生素数d24中项的二元运算程序。
#10
独木星空2021-12-01 20:27
SELECT  1
USE D:\连续整数方程\三生素数二元汇总1简.DBF ALIAS 三生二元
SELECT  2
USE D:\连续整数方程\三生素数d24半.DBF ALIAS 三生半
SELECT  3
USE D:\连续整数方程\三生素数三元运算结果表.DBF ALIAS 三生三元结果
kssj=SECONDS()
 

          SELECT  2
          GO 1
          For j=1 to 943
          @ 15,22 say j
          A=三中24
         
              SELECT 3
             INSERT INTO 三生三元结果 (合成数,方法数) SELECT 合成数+A ,相同记录数 FROM 三生二元
          SELECT 2
          SKIP
          ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是在上楼基础上,做的三生素数d24的中项,三元运算。
#11
独木星空2021-12-02 08:05
SELECT  1
USE D:\连续整数方程\三生素数逆1.DBF ALIAS 三生逆1
SELECT  2
USE D:\连续整数方程\三生素数逆2.DBF ALIAS 三生逆2
SELECT  3
USE D:\连续整数方程\三生素数二元运算表逆.DBF ALIAS 三生二元表
kssj=SECONDS()

          SELECT  2
          GO 1
          For j=1 to 1009
          @ 15,22 say j
          B=三中42
         
             SELECT 3
             INSERT INTO 三生二元表 (合成数) SELECT 三中42+B FROM 三生逆1
          SELECT  2
          SKIP
          ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#12
独木星空2021-12-02 08:05
CLOSE DATA
USE d:\连续整数方程\三生素数二元运算表逆.dbf && 设源表的名称为"表1"
P=''
FOR K=1 TO FCOUNT()
P=P+IIF(EMPTY(P),'',',')+FIELDS(K)&& 取得表中所有字段名称,放在P中
ENDFOR

SELECT *,COUNT(FIELDS(1)) AS 相同记录数 FROM DBF() GROUP BY &P. INTO DBF d:\连续整数方程\三生素数二元运算汇总逆1 && 取得各记录的相同记录数及其各字段值
SELECT * FROM DBF() WHERE 相同记录数>1 && 该查询结果详细列举了表1中各重复记录的 重复数
USE IN   三生素数二元运算汇总逆1
#13
独木星空2021-12-02 08:05
SELECT  1
USE D:\连续整数方程\三生素数二元汇总1简逆.DBF ALIAS 三生二元
SELECT  2
USE D:\连续整数方程\三生素数逆1.DBF ALIAS 三生半
SELECT  3
USE D:\连续整数方程\三生素数三元运算结果表逆.DBF ALIAS 三生三元结果
kssj=SECONDS()


          SELECT  2
          GO 1
          For j=1 to 1009
          @ 15,22 say j
          A=三中42
         
              SELECT 3
             INSERT INTO 三生三元结果 (合成数,方法数) SELECT 合成数+A ,相同记录数 FROM 三生二元
          SELECT 2
          SKIP
          ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
#14
独木星空2021-12-02 08:06
CLOSE DATA
USE d:\连续整数方程\三生素数三元运算结果表逆.dbf
sele 合成数,sum(方法数) as 方法数 from 三生素数三元运算结果表逆 group by 合成数  into dbf d:\连续整数方程\三生三元运算统计表逆
USE IN 三生三元运算统计表逆
#15
独木星空2021-12-02 08:08
以上四步,完成三生素数d42中项和的三元合成分布数据,获知60万以前的6n类数的解组数(模5余数是4的6n类无解,不在考虑范围以内)
#16
独木星空2021-12-10 12:55
SELECT 1
USE d:\二加三或1加4\孪生素数表.DBF ALIAS 孪素表
SELECT 2
USE d:\二加三或1加4\孪生素数统计表.DBF ALIAS 孪统计
SELECT 3
USE d:\二加三或1加4\偶数表新.DBF ALIAS 偶数表新
SELECT 4
USE d:\二加三或1加4\正三生素数表.dbf ALIAS 正三素表
SELECT 5
USE d:\二加三或1加4\正三素统计表.dbf ALIAS 正三统计
kssj=SECONDS()
bwjm="偶数周期表二加三"

 For i=2381 TO 2383
      @ 5,12 say i
      wd=bwjm+ALLTRIM(STR(i-1))
      && USE IN 3
      && USE d:\等差四生素数\偶数表新.DBF ALIAS 偶数表新
       SELECT 3
     
       DELETE ALL
       PACK
      
       FOR j=1 TO i
        @ 15,22 say j
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  5
        GO i-j+1
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=孪中
               jl1=recno()
                 SELECT  4
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 jl2=recno()
                 B=正三中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 4
                 GO jl2+1
                 ENDFOR
               SELECT 1
               GO jl1+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE IN 3&&打开,或关闭,那个工作区(或者,写别名)
      
      USE d:\二加三或1加4\偶数表新.dbf && 设源表的名称为"表1"
      P=''
      FOR K=1 TO FCOUNT()
      P=P+IIF(EMPTY(P),'',',')+FIELDS(K)&& 取得表中所有字段名称,放在P中
      ENDFOR

      SELECT *,COUNT(FIELDS(1)) AS 相同记录数 FROM DBF() GROUP BY &P. INTO DBF d:\二加三或1加4\&wd
      
      USE IN &wd
      
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是孪中+最密三生素数的中项统计程序。
#17
独木星空2021-12-10 16:03
SELECT 1
USE d:\二加三或1加4\孪生素数表.DBF ALIAS 孪素表
SELECT 2
USE d:\二加三或1加4\孪生素数统计表.DBF ALIAS 孪统计
SELECT 3
USE d:\二加三或1加4\偶数表新.DBF ALIAS 偶数表新

kssj=SECONDS()
bwjm="偶数周期表二加二"

 For i=2381 TO 2383
      @ 5,12 say i
      wd=bwjm+ALLTRIM(STR(i-1))
      && USE IN 3
      && USE d:\等差四生素数\偶数表新.DBF ALIAS 偶数表新
       SELECT 3
     
       DELETE ALL
       PACK
      
       FOR j=1 TO INT(i/2)
        @ 15,22 say j
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j+1
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=孪中
               jl1=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 jl2=recno()
                 B=孪中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 GO jl2+1
                 ENDFOR
               SELECT 1
               GO jl1+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE IN 3&&打开,或关闭,那个工作区(或者,写别名)
      
      USE d:\二加三或1加4\偶数表新.dbf && 设源表的名称为"表1"
      P=''
      FOR K=1 TO FCOUNT()
      P=P+IIF(EMPTY(P),'',',')+FIELDS(K)&& 取得表中所有字段名称,放在P中
      ENDFOR

      SELECT *,COUNT(FIELDS(1)) AS 相同记录数 FROM DBF() GROUP BY &P. INTO DBF d:\二加三或1加4\&wd
      
      USE IN &wd
      
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
孪中合成程序。
#18
独木星空2021-12-10 18:23
SELECT 1
USE d:\二加三或1加4\正三生素数表.DBF ALIAS 三素表
SELECT 2
USE d:\二加三或1加4\正三素统计表.DBF ALIAS 三素统计
SELECT 3
USE d:\二加三或1加4\偶数表新.DBF ALIAS 偶数表新

kssj=SECONDS()
bwjm="偶数周期表三加三"

 For i=2381 TO 2383
      @ 5,12 say i
      wd=bwjm+ALLTRIM(STR(i-1))
      && USE IN 3
      && USE d:\等差四生素数\偶数表新.DBF ALIAS 偶数表新
       SELECT 3
     
       DELETE ALL
       PACK
      
       FOR j=1 TO INT(i/2)
        @ 15,22 say j
        SELECT  2     
        GO j
        zgs1=总个数
        fgs1=分个数
        SELECT  2
        GO i-j+1
        zgs2=总个数
        fgs2=分个数
           SELECT 1
           GO zgs1-fgs1+1
               FOR k1=1  TO  fgs1
               A=正三中
               jl1=recno()
                 SELECT  1
                 GO zgs2-fgs2+1
                 For k2=1 to fgs2
                 jl2=recno()
                 B=正三中
                 C=A+B
                 SELECT 3
                 APPEND BLANK   
                 REPLACE 偶数 WITH C   
                 SELECT 1
                 GO jl2+1
                 ENDFOR
               SELECT 1
               GO jl1+1
             ENDFOR   
          ENDFOR
       SELECT 3
       USE IN 3&&打开,或关闭,那个工作区(或者,写别名)
      
      USE d:\二加三或1加4\偶数表新.dbf && 设源表的名称为"表1"
      P=''
      FOR K=1 TO FCOUNT()
      P=P+IIF(EMPTY(P),'',',')+FIELDS(K)&& 取得表中所有字段名称,放在P中
      ENDFOR

      SELECT *,COUNT(FIELDS(1)) AS 相同记录数 FROM DBF() GROUP BY &P. INTO DBF d:\二加三或1加4\&wd
      
      USE IN &wd
      
    ENDFOR
    =MESSAGEBOX("运行时间:"+LTRIM(STR(INT((SECONDS()-kssj)/60)))+"分"+LTRIM(STR(MOD(SECONDS()-kssj,60),5,2))+"秒",64,"运行时间提示")
这是三生素数中项和结果统计程序。
1