以文本方式查看主题 - Foxtable(狐表) (http://foxtable.net/bbs/index.asp) -- 专家坐堂 (http://foxtable.net/bbs/list.asp?boardid=2) ---- 请教一个比对问题 (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=133175) |
-- 作者:douglas738888 -- 发布时间: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如何与所有行进行客户名称的字符比对进行统计?) |
-- 作者:有点甜 -- 发布时间:2019/4/9 9:18:00 -- 直接用这个,如
http://www.foxtable.com/webhelp/scr/2747.htm
|
-- 作者:douglas738888 -- 发布时间: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 -- 发布时间: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 -- 发布时间:2019/4/9 11:01:00 -- 楼上的老师厉害,非等比较+字典,学习了。 另外,如何count出比如2019年的新客户数? |
-- 作者:y2287958 -- 发布时间:2019/4/9 11:04:00 -- 全在字典里 |
-- 作者:有点甜 -- 发布时间:2019/4/9 11:37:00 --
统计18年的用户个数,统计18、19年的用户个数,相减,就是值啊。
|
-- 作者:douglas738888 -- 发布时间:2019/4/9 11:48:00 -- 甜老师,不是单纯的相减,上面另一个老师指导的代码是通过字典形式得到结果是一种方式
甜老师所说的相减统计是包含了其他年的同名客户的统计数量,如果19年的客户中有18年同名的不进行统计,只统计不同名的,这里不用相减,我一直没理清楚如何进行这样的后台统计 |
-- 作者:有点甜 -- 发布时间:2019/4/9 13:03:00 -- 如果你没有删除用户、减少用户的操作,就是简单的相减就行。
统计18年数据3,统计18年、19年数据4,相减等于1,即可。 |
-- 作者:douglas738888 -- 发布时间:2019/4/9 14:47:00 -- 老师,经测试,可以这样来单项统计,但不知效率影响如何
Dim y1 As Integer = 2019 \'指定年份
Dim it As Integer |