excel-中台数据库搭建(四)


补充部分:这个部分卡的时间最长,主要就是一句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

具体实现:

excel-中台数据库搭建(一)

excel-中台数据库搭建(二)

excel-中台数据库搭建(三)

销售系统搭建(一)

销售系统搭建(二)