补充部分:这个部分卡的时间最长,主要就是一句sql, 正是这句sql 让我重新设计了数据库
需求:根据数据总表中销售的id获取这个销售所有的学校数据,再跟进这个学校数据的ID ,获取回访数据里最后一条回访数据,并且计算回访数据中,这个学校一共有多少条数据,然后再去跟进结果里面获取这个学校的跟进结果的数据。这个联表联到我怀疑人生。
拆解下需求:
根据销售id 获取 这个销售被分配的所有的学校数据
根据学校的id, 获取回访表中这个学校所有的回访数据,并取最后一条
获取所有的回访数据后,计算一下这个学校一共被回访了多少次
最后,根据学校的id查询下跟进结果里的结果数据。
就是这句sql,差点把整个项目鸽了。太费劲了。而且我只想用一句sql,不想来回调数据,既费内存,又费效率,好在终于搞出来了。
上代码
Public tableFrom() As Variant
Sub InitTableFrom()
ReDim tableFrom(1 To 15) As Variant
tableFrom(1) = "数据总表.id"
tableFrom(2) = "数据总表.学校名称"
tableFrom(3) = "销售.姓名"
tableFrom(4) = "数据总表.分配时间"
tableFrom(5) = "R.回访时间"
tableFrom(6) = "R.意向等级"
tableFrom(7) = "R.是否与校长建联"
tableFrom(8) = "跟进结果.加微信"
tableFrom(9) = "跟进结果.加公众号"
tableFrom(10) = "跟进结果.是否应约峰会"
tableFrom(11) = "跟进结果.签约"
tableFrom(12) = "cint(T.回访数据总数)"
tableFrom(13) = "R.触达结果"
tableFrom(14) = "R.情况说明"
tableFrom(15) = "R.接通部门"
End Sub
Sub 客户跟进数据()
Dim sql As String
Dim columsTitle As String
Call 连接数据库
InitTableFrom ' 初始化数组
columsTitle = Join(tableFrom, ", ") ' 构建新的列名部分
'sql = "SELECT " & columsTitle & " " _
& "FROM (((数据总表 " _
& "LEFT JOIN " _
& "(SELECT 回访.数据总表id, COUNT(回访.数据总表id) AS 回访数据总数, Max(回访.id) AS 最后回访数据 " _
& "FROM 回访 " _
& "GROUP BY 回访.数据总表id) AS T ON 数据总表.id = T.数据总表id) " _
& "LEFT JOIN 回访 AS R ON T.最后回访数据 = R.id) " _
& "LEFT JOIN 销售 ON 数据总表.跟进人id = 销售.id) " _
& "WHERE 数据总表.跟进人id <> 0"
sql = "SELECT " & columsTitle & " " _
& "FROM ((((数据总表 " _
& "LEFT JOIN " _
& "(SELECT 回访.数据总表id, COUNT(回访.数据总表id) AS 回访数据总数, Max(回访.id) AS 最后回访数据 " _
& "FROM 回访 " _
& "GROUP BY 回访.数据总表id) AS T ON 数据总表.id = T.数据总表id) " _
& "LEFT JOIN 回访 AS R ON T.最后回访数据 = R.id) " _
& "LEFT JOIN 销售 ON 数据总表.跟进人id = 销售.id) " _
& "LEFT JOIN 跟进结果 ON 数据总表.id = 跟进结果.学校名称id) " _
& "WHERE 数据总表.跟进人id <> 0"
Set rs = New ADODB.Recordset
rs.Open sql, cnn, adOpenKeyset, adLockOptimistic
Sheets("客户跟进表").Range("c15").CopyFromRecordset rs
'释放对象变量空间
rs.Close: Set rs = Nothing
cnn.Close: Set cnn = Nothing
End Sub