我现在需要做一张表如下格式:日期:2006年×月×日--2006年×月×日       业务员:                 查询按钮  导出按钮----------------------------------------------------------------------------------------
客户编号   客户名称                        期初余额   销售累计   回款累计    期末余额
----------------------------------------------------------------------------------------如上图,当业务员为空时查询数据库中的所有客户。
上表需要从三张表中取数,1、客户档案(khda):客户编号,客户名称
2、销售表(sale):年月日,客户名称,业务员,sum(销售金额)
3、回款表(skd):年月日,客户名称,业务员,sum(回款金额)
4、期初表(qc):客户名称,期初余额我写的SQL怎么就是没有反应呢?另外我如何解决动态期初余额的问题?我首次写的SQL,大概是错的一塌糊涂,如下:
SQL = "SELECT khda.客户编码,khda.客户名称"
SQL = SQL & "IIF(ISNULL(AA.销售金额),0,AA.销售金额)-IIF(ISNULL(BB.回款金额),0,BB.回款金额) as 金额 "
SQL = SQL & "from( sale left JOIN (select sale.客户名称,B.销售金额"
SQL = SQL & "from sale left JOIN (select skd.客户名称,sum(回款金额) as 回款金额合计"
SQL = SQL & "from  where (((CDate([yue] & '-' & [ri] & '-' & [nian])) Between #" & CDate(TextBox1.Text) & "# And #" CDate(TextBox2.Text)然后在网友mustudent(小生--蚕豆<為者常成,行者常至>) 的帮助下,改成如下:
Dim CNN As New ADODB.Connection
Dim RST As New ADODB.Recordset
Dim SQL As String
ListView1.ListItems.Clear
CNN.Open "provider=Microsoft.jet.OLEDB.4.0;data source=" &"\dovro\sales.mdb"SQL = "Select K.khbh,K.khmc,Q.qcysk As '期初余额',Sum(Sa.销售金额) As SaSum,Sum(S.je) As SSum,Sasum-SSum As '期末余额'  " & _
"From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(销售金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
"(Select khmc,Sum(je) As SSum Group By khmc)S" & _
" Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc and (((CDate([月] & '-' & [日] & '-' & [年])) Between #" & CDate(TextBox1.Text) & "# And #" & CDate(TextBox2.Text) & "#))  and Sa.业务员 like '%" & TextBox3.Text & "%' "
 RST.Open SQL, CNN, adOpenKeyset, adLockOptimistic
    Do Until RST.EOF
        With ListView1.ListItems.Add(, , RST.Fields("khbh"))
            .SubItems(1) = RST.Fields("khmc")
            .SubItems(2) = RST.Fields("期初余额")
            .SubItems(3) = RST.Fields("SaSum")
            .SubItems(4) = RST.Fields("SSum")
            .SubItems(5) = Format(RST.Fields("期末余额"), "#,##0.00")
             RST.MoveNext
        End With
    Loop
    'With ListView1.ListItems.Add
       ' .SubItems(1) = "             本 月 合 计"
      '  .SubItems(2) = IIf(IsNull(xsje), "", Format(xsje, "#,##0.00"))
     '   .SubItems(3) = IIf(IsNull(hkje), "", Format(hkje, "#,##0.00"))
     '   .SubItems(4) = IIf(IsNull(hkje), "", Format(hkje, "#,##0.00"))
     '   .SubItems(5) = IIf(IsNull(hkje), "", Format(hkje, "#,##0.00"))
   ' End With
    RST.Close
    Set CNN = Nothing
然后在上面的代码我有几点看不明白,
1、我在其中对业务员是如何筛选的?这个代码中不是很清楚,
2、对期末余额=期初余额+销售累计-回款累计这个是如何得出?
3、动态的期初余额怎么办,我现在的期初余额都是年初数,这个地方该怎么改呀?
4、代码没有通过,提示“select 子句中包含一个保留字,拼写错误或丢失的参数,或标点符号不正确”我看看好象没有不对的呀?
谢谢mustudent(小生--蚕豆<為者常成,行者常至>),请大家帮我再看看,谢谢!

解决方案 »

  1.   

    大哥,我就是用你后来最后一次回的代码,可能这句有问题
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(销售金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum Group By khmc)S" & _
    是不是S.je这个没有定义或者什么的?
      

  2.   

    Select K.khbh,K.khmc,Q.qcysk As '期初余额',Sa.SaSum,S.SSum ,Sa.Sasum-S.SSum As '期末余额'  " & _
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(销售金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum Group By khmc)S" & _
    " Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc 
    增加條件的話 你可以去對應的 From後面的子Sql語句裏面去加 比如你怎加對業務員的限制可以這樣
    Select K.khbh,K.khmc,Q.qcysk As '期初余额',Sa.SaSum,S.SSum ,Sa.Sasum-S.SSum As '期末余额'  " & _
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(销售金额) As Sasum,业务员 From sale Where 業務員='小黑' Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum Group By khmc)S" & _
    " Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc 
    應該也可以在Where 後面加
    Select K.khbh,K.khmc,Q.qcysk As '期初余额',Sa.SaSum,S.SSum ,Sa.Sasum-S.SSum As '期末余额'  " & _
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(销售金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum Group By khmc)S" & _
    " Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc 
    And Sa.業務員='小黑'
    你看看現在可以了不
      

  3.   

    估計可能還有錯誤... 對這個SQL沒低
      

  4.   

    我用这句代码,结果还是这个情况:SELECT子句中包含一个保留字,拼写错误或丢失的参数或标点符号正确!
    没有通过!
    SQL = "Select K.khbh,K.khmc,Q.qcysk As '期初余额',Sa.SaSum,S.SSum ,Sa.Sasum-S.SSum As '期末余额'  " & _
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(销售金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum Group By khmc)S" & _
    " Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc"
      

  5.   

    "(Select khmc,Sum(je) As SSum Group By khmc)S" 这个的S有什么用啊?
      

  6.   

    "(Select khmc,Sum(je) As SSum Group By khmc)S" 这个的S有什么用啊?
    ---------
    s 代表Select khmc,Sum(je) As SSum Group By khmc这个查询的名称你什么数据库?你把每张表和要得到的结果都简单的列出点数据,这样问题直观点,想回帖的人也好测试
      

  7.   

    你可以把S看成是一張表(虛擬表)包括 khmc SSum兩個字段 這兩個字段分別對應的是skd的 khmc和 sum(回款) 
    呵呵 我的掉了一個 from skd
    (Select khmc,Sum(je) As SSum From skd Group By khmc)S
      

  8.   

    大哥,代码一部分是通过了,
    SQL = "Select K.khbh,K.khmc,Q.qcysk As '期初余额',Sa.SaSum,S.SSum ,Sa.Sasum-S.SSum As '期末余额'" & _
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum From skd Group By khmc)S" & _
    " Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc"
     RST.Open SQL, CNN, adOpenKeyset, adLockOptimistic
        Do Until RST.EOF
            With ListView1.ListItems.Add(, , RST.Fields("khbh"))
                .SubItems(1) = RST.Fields("khmc")
              '  .SubItems(2) = RST.Fields("期初余额")
                .SubItems(3) = Format(RST.Fields("SaSum"), "#,##0.00")
                .SubItems(4) = Format(RST.Fields("SSum"), "#,##0.00")
              '  .SubItems(5) = Format(RST.Fields("期末余额"), "#,##0.00")
                 RST.MoveNext
            End With
    在执行中如果不将  
    '  .SubItems(2) = RST.Fields("期初余额")
     '  .SubItems(5) = Format(RST.Fields("期末余额"), "#,##0.00")注销,就会出现下列提示:
    行动时错误'3265'.在对应所需要名称或数的集合中,未找到项目?另外这而的条件我该怎么加呀,我有时间的限制和业务员的限制?
    我的数据库是ACCESS的,最后是按业务员的进行客户筛选应收帐款。
      

  9.   

    这是你直接复制的你的程序里面的代码嘛?
    我没有看出什么错误来阿  把期初余额 和 期末余额 英文的看看 还有 你的期末余额的计算有错误 不是Sa.Sasum-S.SSum 是Q.qcysk+Sa.Sasum-S.SSum 
    我的数据库是ACCESS的,最后是按业务员的进行客户筛选应收帐款。
    直接在Where 后面怎加 判断条件就可以了 比如S.业务员='NN'
      

  10.   

    SQL = "Select distinct K.khbh,K.khmc,Q.qcysk,Sa.SaSum,S.SSum,Q.qcysk+Sa.SaSum-S.SSum AS 'fbe'" & _
    "From(Select khbh,khmc From khda)K,(Select qcysk,khmc From khqc)Q,(Select 客户名称,Sum(金额) As Sasum,业务员 From sale Group By 客户名称,业务员)Sa," & _
    "(Select khmc,Sum(je) As SSum From skd Group By khmc)S" & _
    " Where K.khmc=Sa.客户名称 And K.khmc=S.khmc And K.khmc=Q.khmc"
     RST.Open SQL, CNN, adOpenKeyset, adLockOptimistic
        Do Until RST.EOF
            With ListView1.ListItems.Add(, , RST.Fields("khbh"))
                .SubItems(1) = RST.Fields("khmc")
                .SubItems(2) = Format(RST.Fields("qcysk"), "#,##0.00")
                .SubItems(3) = Format(RST.Fields("SaSum"), "#,##0.00")
                .SubItems(4) = Format(RST.Fields("SSum"), "#,##0.00")
               ' .SubItems(5) = Format(RST.Fields("fbe"), "#,##0.00")
                 RST.MoveNext
            End With
        Loop
        
         xsje = GetxsjeSum(ListView1.ListItems.Count)
         hkje = GethkjeSum(ListView1.ListItems.Count)
        With ListView1.ListItems.Add
             .SubItems(1) = "                 合 计"大哥呀,就差一点点了,主要问题是出在这儿Q.qcysk+Sa.SaSum-S.SSum AS 'fbe',如果删除这句也不行,有这句 .SubItems(5) = Format(RST.Fields("fbe"), "#,##0.00")就不行?为什么啊?