注册 登录
编程论坛 VFP论坛

该问题已经困惑很长时间了,大神帮忙解决一下

bufanchao 发布于 2021-03-22 11:21, 3135 次点击
只有本站会员才能查看附件,请 登录

每位员工的满意,不满意数量  一次性统计出来(效果如右图)

[此贴子已经被作者于2021-3-22 11:23编辑过]

14 回复
#2
sdta2021-03-22 11:37
有数据才能写出代码
#3
wengjl2021-03-22 14:57
只有本站会员才能查看附件,请 登录
#4
bufanchao2021-03-22 21:56
回复 3楼 wengjl
太感谢了太感谢了太感谢了太感谢了太感谢了太感谢了,程序正常。但是不清楚有些代码的的意思。

[此贴子已经被作者于2021-3-22 22:16编辑过]

#5
bufanchao2021-03-22 22:00
    SET ENGINEBEHAVIOR 70
      SET SAFETY OFF
      
      CLOSE DATABASES
      SELECT 0
      USE pyk ALIAS kg             &pyk  kg 什么意思
      SELECT 0
      USE pytj ALIAS bmk            &pytj  是评议统计  bmk 什么意思
      SCAN
        c_ygxm=ALLTRIM(bmk.ygxm)     &ygxm  员工姓名
        SELECT sum(IIF(EVALUATE(c_ygxm)='很满意',1,0)) as py1,;  & py1 是什么意思
               sum(IIF(EVALUATE(c_ygxm)='满意',1,0)) as py2,;
               sum(IIF(EVALUATE(c_ygxm)='不满意',1,0)) as py3 from kg into cursor tmp
              
        SELECT bmk
        REPLACE bmk.py1 WITH tmp.py1
        REPLACE bmk.py2 WITH tmp.py2
        REPLACE bmk.py3 WITH tmp.py3
      ENDSCAN
      
#6
bufanchao2021-03-22 22:01
回复 4楼 bufanchao
SET ENGINEBEHAVIOR 70
      SET SAFETY OFF
      
      CLOSE DATABASES
      SELECT 0
      USE pyk ALIAS kg             &pyk  kg 什么意思
      SELECT 0
      USE pytj ALIAS bmk            &pytj  是评议统计  bmk 什么意思
      SCAN
        c_ygxm=ALLTRIM(bmk.ygxm)     &ygxm  员工姓名
        SELECT sum(IIF(EVALUATE(c_ygxm)='很满意',1,0)) as py1,; & py1 是什么意思
               sum(IIF(EVALUATE(c_ygxm)='满意',1,0)) as py2,;
               sum(IIF(EVALUATE(c_ygxm)='不满意',1,0)) as py3 from kg into cursor tmp
              
        SELECT bmk
        REPLACE bmk.py1 WITH tmp.py1
        REPLACE bmk.py2 WITH tmp.py2
        REPLACE bmk.py3 WITH tmp.py3
      ENDSCAN

[此贴子已经被作者于2021-3-22 22:02编辑过]

#7
bccn2012032021-03-22 22:17
借用了 WengJl 的表
程序代码:
CLOSE DATABASES
USE pyk IN 0
AFIELDS(lazdm)
LOCAL latj[ALEN(lazdm, 1), 4]
FOR lnj = 1 TO ALEN(latj, 1)
    latj[lnj, 2] = 0
    latj[lnj, 3] = 0
    latj[lnj, 4] = 0
ENDFOR
FOR lnj = 1 TO ALEN(lazdm, 1)
    latj[lnj, 1] = FIELD(lnj)
    SCAN
        IF ALLTRIM(EVALUATE(FIELD(lnj))) == "跳过"
            LOOP
        ENDIF
        DO CASE
            CASE ALLTRIM(EVALUATE(FIELD(lnj))) == "很满意"
                latj[lnj, 2] = latj[lnj, 2] + 1
            CASE ALLTRIM(EVALUATE(FIELD(lnj))) == "满意"
                latj[lnj, 3] = latj[lnj, 3] + 1
            CASE ALLTRIM(EVALUATE(FIELD(lnj))) == "不满意"
                latj[lnj, 4] = latj[lnj, 4] + 1
        ENDCASE
    ENDSCAN
ENDFOR
SET ORDER TO
CREATE CURSOR tj (部门 C(10), 很满意 N(3), 满意 N(3), 不满意 N(3))
APPEND FROM ARRAY latj
BROWSE
#8
bccn2012032021-03-22 22:32
回复 3楼 wengjl
代码构思别具一格,狐功深厚,佩服!
USE pytj ALIAS bmk
SCAN
......
ENDSCAN
#9
sdta2021-03-22 22:35
回复 4楼 bufanchao
现在是不是到夜霄的时间了,楼主........
#10
wengjl2021-03-23 08:13
以下是引用bufanchao在2021-3-22 22:01:02的发言:

 SET ENGINEBEHAVIOR 70
      SET SAFETY OFF
      
      CLOSE DATABASES
      SELECT 0
      USE pyk ALIAS kg             &pyk  kg 什么意思
      SELECT 0
      USE pytj ALIAS bmk            &pytj  是评议统计  bmk 什么意思
      SCAN
        c_ygxm=ALLTRIM(bmk.ygxm)     &ygxm  员工姓名
        SELECT sum(IIF(EVALUATE(c_ygxm)='很满意',1,0)) as py1,;  & py1 是什么意思
               sum(IIF(EVALUATE(c_ygxm)='满意',1,0)) as py2,;
               sum(IIF(EVALUATE(c_ygxm)='不满意',1,0)) as py3 from kg into cursor tmp
              
        SELECT bmk
        REPLACE bmk.py1 WITH tmp.py1
        REPLACE bmk.py2 WITH tmp.py2
        REPLACE bmk.py3 WITH tmp.py3
      ENDSCAN

给表起个别名而已,本人习惯,要写入的用BMK,输出的用其他。
PY 指评议
py1 指很满意。你也可以用其他字母表示,或用中文表示。不用中文是因为可省去输入法的不断切换之麻烦


[此贴子已经被作者于2021-3-23 16:39编辑过]

#11
吹水佬2021-03-23 10:08
只有本站会员才能查看附件,请 登录

程序代码:
SELECT 0
USE pyk
n = AFIELDS(arr)
SELECT 0
CREATE CURSOR pytj (ygxm C(10),很满意 I, 满意 I, 不满意 I)
APPEND FROM ARRAY arr FIELDS ygxm
INDEX on ALLTRIM(ygxm) TAG yg
SELECT pyk
SCAN
    FOR i=1 TO n
        py = ALLTRIM(EVALUATE(arr[i,1]))
        IF INLIST(py, "很满意","满意","不满意")
            =SEEK(arr[i,1], "pytj")
           cf = "pytj." + py
           REPLACE (cf) WITH EVALUATE(cf)+1 IN "pytj"
        ENDIF
    ENDFOR
ENDSCAN
SELECT * FROM pytj
#12
bccn2012032021-03-23 10:46
程序代码:
CLOSE DATABASES
CREATE CURSOR tj (部门 C(10), 很满意 N(3), 满意 N(3), 不满意 N(3))
USE pyk IN 0
SELECT pyk
FOR lnj = 1 TO FCOUNT()
    lc = "pyk." + FIELD(lnj)
    INSERT INTO tj (部门) VALUES (lc)
    SCAN
        IF "跳过" $ EVALUATE(FIELD(lnj))
            LOOP
        ENDIF
        REPLACE (&lc) WITH EVALUATE(&lc) + 1 IN tj
    ENDSCAN
ENDFOR
SELECT tj
BROWSE
#13
wengjl2021-03-23 12:31
#14
schtg2021-03-23 19:22
学习啦,谢谢!
#15
bufanchao2021-03-23 20:25
太感谢了!!
1