以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.com/bbs/index.asp)
--  专家坐堂  (http://foxtable.com/bbs/list.asp?boardid=2)
----  统计execl表中下级会员账号数量大于30个且下级会员账号多于3层的会员账号数量,统计上述会员账号按照证件号去重后的数量 该怎么操作呢?代码或者sql语句该怎么写呢?  (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=137545)

--  作者:李孝春
--  发布时间:2019/7/9 11:06:00
--  统计execl表中下级会员账号数量大于30个且下级会员账号多于3层的会员账号数量,统计上述会员账号按照证件号去重后的数量 该怎么操作呢?代码或者sql语句该怎么写呢?
统计execl表中下级会员账号数量大于30个且下级会员账号多于3层的会员账号数量,统计上述会员账号按照证件号去重后的数量
以admin为第一级为例 则要求admin直接推荐的用户要大于30个 且这写会员对应推荐的下级至少要有三层   如admin推荐了张三  张三推荐了李四 李四推荐了王五 王五推荐了麻子  
该怎么操作呢?代码或者sql语句该怎么写呢?

图片点击可在新窗口打开查看此主题相关图片如下:qq图片20190709105852.png
图片点击可在新窗口打开查看
 下载信息  [文件大小:   下载次数: ]
图片点击可在新窗口打开查看点击浏览该文件:附件2.xls



--  作者:有点蓝
--  发布时间:2019/7/9 11:25:00
--  
要求admin直接推荐的用户要大于30个 -- 是指推荐人用户名等于admin的有30个?

还是说admin推荐了2个人a和b,a推荐了15人,b推荐了15人,那么admin直接推荐的是算2个人?还是算2+15+15=32?

--  作者:李孝春
--  发布时间:2019/7/9 11:37:00
--  回复:(有点蓝)要求admin直接推荐的用户要大于30个 ...
要求是admin直接推荐30及以上 符合条件的名单
然后这个名单又有不含本名单在内的下级三层名单
然后这个名单利用证件号码去重后
得到最后数据名单数量及列表

--  作者:有点蓝
--  发布时间:2019/7/9 11:42:00
--  
我现在搞不懂直接推荐是指什么?请回答2楼的问题。
--  作者:李孝春
--  发布时间:2019/7/9 12:18:00
--  回复:(有点蓝)要求admin直接推荐的用户要大于30个 ...
Excel数据是样本数据,建议导入狐表创建表格数据后操作
遍历整个Excel表格数据  只要任何一级名单满足下列条件,就筛选出来。
1、下级总数等于或大于30    
2、且满足下级下面又存其推荐1,被推荐人1又推荐2,被推荐人2又推荐3及以上,不少于三层会员的名单
3、利用证件号码对所得到的名单去重处理。

目的:从整个Excel表中的全部记录去查找满足这三个条件的数据。

admin推荐了2个人a和b,a推荐了15人,b推荐了15人,那么admin直接推荐的是算2+15+15=32

ab两个人下面又推荐发展了CD CD又推荐发展了ef ef又发展了gh 
[此贴子已经被作者于2019/7/9 12:37:58编辑过]

--  作者:有点蓝
--  发布时间:2019/7/9 14:20:00
--  
去重怎么处理?

1、a推荐c,b也推荐c(马甲)
2、a推荐b,b也推荐a(马甲)
3、a推荐b,b推荐c, c推荐a(马甲)
4、a推荐b,b推荐c, a(马甲)推荐c
5、a推荐a(马甲)
6、a推荐b,重复了多次
7、a推荐b,b推荐c,c推荐d
     a推荐e,e推荐c的马甲,c推荐f
8、......

去重除非一刀切,只要重复就只取一个,否则无法使用程序判断。

--  作者:李孝春
--  发布时间:2019/7/9 14:58:00
--  回复:(有点蓝)去重怎么处理?1、a推荐c,b也推荐c(...
去重只需要在前面满足大于三十或者等于三十   且层级等于或者大于三层的数据筛选出来后  再直接用证件号码去重即可
--  作者:有点蓝
--  发布时间:2019/7/9 16:59:00
--  
内部函数:sumchild

Dim yh As String = args(0)
Dim lst As List(of String) = args(1)
Dim level As Integer = args(2)
Dim drs As List(Of DataRow) = DataTables("表A").Select("推荐人用户名=\'" & yh & "\'")
If drs.Count = 0 Then Return level
Dim k As Integer
For Each dr As DataRow In drs
    If dr.IsNull("用户证件号") Then
        lst(0) = val(lst(0)) + 1
    Else
        If lst.Contains(dr("用户证件号")) = False
            lst.Add(dr("用户证件号"))
        End If
        k = Functions.Execute("sumchild",dr("用户名"),lst,level+1)
        If k > level Then level = k
    End If
Next

Return level

命令窗口调用
Dim dtb As New DataTableBuilder("统计")
dtb.AddDef("用户名", Gettype(String), 32)
dtb.AddDef("层次", Gettype(Integer))
dtb.AddDef("计数", Gettype(Integer))
dtb.Build()
MainTable= Tables("统计")

Dim lst As New List(of String)
For Each yh As String In DataTables("表A").GetValues("用户名")
    lst.Clear
    lst.Add("0")
    Dim k = Functions.Execute("sumchild",yh,lst,0)
    If k>=3 AndAlso (val(lst(0)) + lst.Count-1) >= 30
        Dim r As Row = Tables("统计").AddNew
        r("用户名") = yh
        r("层次") = k
        r("计数") = val(lst(0)) + lst.Count-1
    End If
Next


--  作者:李孝春
--  发布时间:2019/7/9 18:03:00
--  回复:(有点蓝)内部函数:sumchildDim yh As String...
谢谢有点蓝老师
层次是这个用户一共有多少个下级层次么?
计数是这个用户下的所有下级数据么?大于或者等于30的?
图片点击可在新窗口打开查看此主题相关图片如下:数据.png
图片点击可在新窗口打开查看

--  作者:有点蓝
--  发布时间:2019/7/9 20:08:00
--  
是的,自己核对一下