Foxtable(狐表)用户栏目专家坐堂 → 请教一个比对问题


  共有2318人关注过本帖树形打印复制链接

主题:请教一个比对问题

帅哥哟,离线,有人找我吗?
douglas738888
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
请教一个比对问题  发帖心情 Post By:2019/4/9 8:49:00 [只看该作者]

请教老师,想设计一个SQL比对统计,请给予指导,谢谢!

 

比如:一个Table中有一个列为客户名称,根据入档日期进行统计当年的新增客户数,如果新增的客户名称与原来的客户名称进行比对,如果重复不进行统计,如果不重复进行统计

 

客户名称       入档日期

AAA            2018-01-01

BBB            2018-02-02

CCC            2018-03-03

AAA            2018-04-04

AAA            2019-02-02

BBB            2019-02-02

DDD           2019-03-03

 

想实现统计结果,2018年新增客户数为3(这里采用不重复统计可以实现), 2019年新增客户数为1(这里的客户DDD如何与所有行进行客户名称的字符比对进行统计?)


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/9 9:18:00 [只看该作者]

直接用这个,如

 

http://www.foxtable.com/webhelp/scr/2747.htm

 


 回到顶部
帅哥哟,离线,有人找我吗?
douglas738888
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2019/4/9 10:03:00 [只看该作者]

老师,GetValues或SQLGetValues,只是获取或统计不重复值,但是怎样比对统计某年度新出现的客户名称数量

 

比如:下面代码只能统计出不重复客户的数量,根据上面例子,得到的值是4,怎样设置条件,2019年统计出的值是1(因为2019的客户中AAA和BBB已经是老客户,在2018年已有,2019年不计入统计,2019年新客户只有DDD)

Dim Total As Integer

Dim acs As List(Of String) = Tables("客户档案").DataTable.SQLGetValues("客户名称","入档完成 = 1") '不重复合计

Total = acs.Count


 回到顶部
帅哥哟,离线,有人找我吗?
y2287958
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4750 积分:34558 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/4/9 10:26:00 [只看该作者]

Dim lst As new List(of String)
Dim dic As New Dictionary(Of String, String)
For Each dr As DataRow In DataTables("CC").DataRows
    If dr.IsNull("客户名称") = False AndAlso dr.IsNull("入档日期") = False
        If lst.Contains(dr("客户名称")) = False
            lst.Add(dr("客户名称") )
            Dim d As Date = dr("入档日期")
            Dim key As String = d.Year
            If dic.ContainsKey(key)
                dic(key) += "/" & dr("客户名称")
            Else
                dic.Add(key,dr("客户名称"))
            End If
        End If
    End If
Next
For Each k As String In dic.Keys
    Output.Show(K & ":" & dic(k))
Next

 回到顶部
帅哥哟,离线,有人找我吗?
douglas738888
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2019/4/9 11:01:00 [只看该作者]

楼上的老师厉害,非等比较+字典,学习了。  另外,如何count出比如2019年的新客户数?

 回到顶部
帅哥哟,离线,有人找我吗?
y2287958
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:狐神 帖子:4750 积分:34558 威望:0 精华:0 注册:2008/8/31 22:44:00
  发帖心情 Post By:2019/4/9 11:04:00 [只看该作者]

全在字典里

 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/9 11:37:00 [只看该作者]

 

统计18年的用户个数,统计18、19年的用户个数,相减,就是值啊。

 

 

 

 


 回到顶部
帅哥哟,离线,有人找我吗?
douglas738888
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2019/4/9 11:48:00 [只看该作者]

甜老师,不是单纯的相减,上面另一个老师指导的代码是通过字典形式得到结果是一种方式

 

甜老师所说的相减统计是包含了其他年的同名客户的统计数量,如果19年的客户中有18年同名的不进行统计,只统计不同名的,这里不用相减,我一直没理清楚如何进行这样的后台统计


 回到顶部
帅哥哟,离线,有人找我吗?
有点甜
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:版主 帖子:85326 积分:427815 威望:0 精华:5 注册:2012/10/18 22:13:00
  发帖心情 Post By:2019/4/9 13:03:00 [只看该作者]

如果你没有删除用户、减少用户的操作,就是简单的相减就行。

 

统计18年数据3,统计18年、19年数据4,相减等于1,即可。


 回到顶部
帅哥哟,离线,有人找我吗?
douglas738888
  10楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:五尾狐 帖子:1174 积分:8782 威望:0 精华:0 注册:2012/4/18 16:28:00
  发帖心情 Post By:2019/4/9 14:47:00 [只看该作者]

老师,经测试,可以这样来单项统计,但不知效率影响如何

 

Dim y1 As Integer = 2019 '指定年份
Dim dt3 As New Date(y1, 1, 1)
Dim dt4 As New Date(y1, 12, 31)


Dim str As String = DataTables("客户档案").SQLGetComboListString("客户名称","入档时间 < '" & dt3 & "'")
str = str.Replace("|", "','")

Dim it As Integer
Dim kcbs As List(of String)
kcbs = DataTables("客户档案").SQLGetvalues("客户名称", "客户名称 Not In ('" & str & "') and 入档时间 >= '" & dt3 & "' And 入档时间 <= '" & dt4 & "'")
For Each s As String In kcbs
output.show(s)
Next
it = kcbs.count
messagebox.show(it)


 回到顶部
总数 11 1 2 下一页