注册 登录
编程论坛 VFP论坛

如何按村、按物品名称进行数据查询统计汇总

王咸美 发布于 2022-10-17 09:28, 1970 次点击
现有表文件huowu.dbf(部分数据)中有很多条记录,物品名称也很多。我想通过统计得到如下效果:纵向统计不重复单位,横向统计各单位进不同物品的金额,并按村进行进行汇总,总金额写入“合计”字段中,请高手赐教,万分感谢!!!
最终效果如下:
只有本站会员才能查看附件,请 登录

只有本站会员才能查看附件,请 登录

原表:
只有本站会员才能查看附件,请 登录
(部分数据)


[此贴子已经被作者于2022-10-17 09:40编辑过]

15 回复
#2
fyyylyl2022-10-17 11:06
数据发错了吧?
#3
gs25367856782022-10-17 11:16
简单,你转向到EXCEL,里面有数据透视,专门处理类似问题。
#4
fyyylyl2022-10-17 11:25
SET ENGINEBEHAVIOR 70
CREATE CURSOR huowu0(单位 c(10),蚕豆 N(6),大豆 N(6),冬瓜 N(6),哈密瓜 N(6),木瓜 N(6),南瓜 N(6),合计 N(6))
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("北山村",0,0,0,0,260,0)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("东山村",0,0,0,0,0,240)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("李家村",210,0,0,210,320,0)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("南山村",10,160,460,0,0,0)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("北山村",20,0,0,0,260,0)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("东山村",30,0,0,0,0,240)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("李家村",210,0,0,210,320,0)
INSERT INTO huowu0(单位,蚕豆,大豆,冬瓜,哈密瓜,木瓜,南瓜) Value("南山村",50,160,460,0,0,0)


SELECT 单位,SPACE(10) 物品名称,合计  金额 FROM huowu0 WHERE .f. INTO CURSOR huowu1 READWRITE
SELECT huowu0
SCAN
    FOR i=2 TO FCOUNT()
        c单位=单位
        cField=FIELD(i)
        nMoney=&cField
        INSERT INTO huowu1(单位,物品名称,金额) Value(c单位,cField,nMoney)
    ENDFOR
ENDSCAN
SELECT 单位,物品名称,SUM(金额) 金额 FROM huowu1 GROUP BY 单位,物品名称 INTO CURSOR huowu
brow
#5
王咸美2022-10-17 11:38
@fyyylyl 非常感谢指点,可惜未用我提供的表文件,动态生成字段名,然后进行统计汇总。

[此贴子已经被作者于2022-10-17 16:38编辑过]

#6
fyyylyl2022-10-17 11:54
可能是我理解反了,下午看吧
#7
xuminxz2022-10-17 13:16
回复 楼主 王咸美
首先,在huowu.dbf所在文件夹下建立一个数据库(空的即可,如果有就不用建立了。)
程序代码:
CLOSE DATABASES  all
CLOSE TABLES all
OPEN DATABASE sj
IF FILE('sjtj.dbf')
    REMOVE TABLE  sjtj
endif
SELECT DISTINCT  物品名称 zdmc FROM huowu  INTO cursor wpqdmp READWRITE
SELECT DISTINCT  单位 FROM huowu INTO dbf  sjtj database  sj
SELECT wpqdmp
ALTER table sjtj ADD 汇总 n(18,2)
SCAN
    _zdmc=ALLTRIM(zdmc)
     ALTER table sjtj  ADD (_zdmc) n(18,2)
ENDSCAN
SELECT 单位 dw,物品名称 wpmc,金额 je FROM huowu INTO CURSOR tjmp GROUP BY dw,wpmc,je
SCAN
    _dw    =ALLTRIM(dw)
    _zdmc=ALLTRIM(wpmc)
    _je=je
    REPLACE (_zdmc) WITH _je,汇总 WITH 汇总+_je FOR ALLTRIM(sjtj.单位)==_dw IN sjtj
ENDSCAN

如果你的数据库不是 sj ,将程序中的SJ替换为你的数据库即可。
之所以要用数据库,是因为不能保证物品名称长度不超过10个字符。数据库表对字段长度没有10字符的限制。
#8
王咸美2022-10-17 14:06
@xuminxz 非常感谢!但数据统计不准确,每一种物品金额未累加(但汇总数据准确)

[此贴子已经被作者于2022-10-17 16:41编辑过]

#9
gs25367856782022-10-17 14:40
看一下,EXCEL数据透视表
只有本站会员才能查看附件,请 登录

简单又方便,何必绑定一棵VFP
抱残守缺啊。。。
#10
sdta2022-10-17 18:34
程序代码:
CLOSE DATABASES
SELECT DISTINCT 物品名称 FROM huowu INTO ARRAY amc
lcStr = "单位 C(10)"
FOR ln = 1 TO ALEN(amc, 1)
    lcStr = lcStr +", " + ALLTRIM(amc[ln, 1]) + " N(4)"
ENDFOR
lcStr = lcStr + ", 合计 N(6)"
CREATE CURSOR hz (&lcStr)
INSERT INTO hz (单位) SELECT DISTINCT 单位 FROM huowu
INSERT INTO hz (单位) VALUES ("总计")
INDEX ON 单位 TAG dw

SELECT huowu
SET RELATION TO 单位 INTO hz
SCAN
    IF FOUND("hz")
        REPLACE (huowu.物品名称) WITH EVALUATE(huowu.物品名称) + huowu.金额, 合计 WITH 合计 + huowu.金额 IN hz
        REPLACE RECORD RECCOUNT() (huowu.物品名称) WITH EVALUATE(huowu.物品名称) + huowu.金额, 合计 WITH 合计 + huowu.金额 IN hz
    ENDIF
ENDSCAN
SET RELATION TO
SELECT hz
SET ORDER TO
BROWSE


[此贴子已经被作者于2022-10-17 19:18编辑过]

#11
王咸美2022-10-17 19:06
如何用SQL进行统计,请赐教!
#12
王咸美2022-10-17 19:19
如何用  vfp代码动态生成字段名,并进行统计汇总,请各位高手帮忙,谢谢!
#13
王咸美2022-10-17 20:43
@sdta 非常感谢您的热心解答!!!
#14
王咸美2022-10-17 21:08
@sdta 非常感谢您的热心解答!!!
#15
sdta2022-10-17 21:37
程序代码:
SELECT DISTINCT 物品名称 FROM huowu INTO CURSOR WLB
CSQL=[SELECT 单位]
SCAN
    CSQL=CSQL+",CAST(SUM(IIF(ALLTRIM(物品名称)=='" + ALLTRIM(物品名称)+"',金额,0)) AS N(6)) AS " + ALLTRIM(物品名称) + IIF(RECNO() < RECCOUNT(),""," FROM huowu GROUP BY 1 INTO CURSOR hz")
ENDSCAN
MESSAGEBOX(CSQL,64,[生成代码提示])
EXECSCRIPT(CSQL)
BROWSE
#16
csyx2022-10-18 01:42
用vfp自带的交叉表,很简单的

close database
use locfile('huowu.dbf')
do (_GENXTAB) with '统计结果'
browse

如果要统计的数据量比较大, 建议使用它的增强版:
https://

[此贴子已经被作者于2022-10-18 01:44编辑过]

1