用vb+access,要在datagrid中输出,部分表如下
主叫号码  起始日期   起始时间 时长(秒) 通话费(元) 代收费用 代收帐目类型 
号码1     2004/09/21 08:34:02      121      0.2        0.9 IP国内长途费 
号码1     2004/09/21 09:28:34       38      0.2        0.3 IP国内长途费 
号码2     2004/09/21 09:50:32       66      0.2        0.0              
号码2     2004/09/21 11:24:33       57      0.2        0.3 IP国内长途费 
号码2     2004/09/21 11:25:51      122      0.2        0.9 IP国内长途费 
号码3     2004/09/21 14:17:17       51      0.2        0.3 IP国内长途费 
号码3     2004/09/21 14:18:20       79      0.2        0.0              
号码4     2004/09/21 14:46:15       59      0.2        0.3 IP国内长途费 
号码4     2004/09/21 15:03:47       48      0.2        0.3 IP国内长途费 
号码4     2004/09/21 15:28:36       97      0.2        0.0              
现在要求按主叫号码分组,查询某一日期某一时间段内每个话机的市话费和长途话费
要注意的是长途话费是没有IP国内长途费(也可以说代收费用为0)的那部分,而长途话费是代收费用加上通话费(即代收费用不为0),把查询的结果在datagrid里打出来,查询结果应为(主叫号码,市话时长,市话费用,长途时长,长途费用),先谢谢各位大虾了
我再作一点说明
长途费用应为通话费加上ip费,而市话费则是没有ip费那部分通话费
所以长途话费应为select [主叫号码] as [长途],sum([时长])/3600 as 长途通话时长(小时),sum([通话费])+sum([代收费用]) as 长途费用(元) from phonelist where [代收帐目类型] is not null " & strtime & " group by [主叫号码]
而市话费应为select [主叫号码],sum([时长])/3600 as 市话通话时长(小时),sum([通话费]) as 市话费用(元) from phonelist where [代收帐目类型] is null " & strtime & " group by [主叫号码]) as a left OUTER JOIN (select [主叫号码] as [长途],sum([时长])/3600 as 长途通话时长(小时),sum([通话费])+sum([代收费用]) as 长途费用(元) from phonelist where [代收帐目类型] is not null " & strtime & " group by [主叫号码]
然后根据主叫号码做链接
但问题是某个查询时段(就是那个strtime)内可能只打了市话或长途,那么这两子查询的结果就有一个返回为空,两个查询就联不起来,而使用外链接好像只能指定为左外链接或右外链接…………
或是各位大侠有其它好办法,只要把那个结果在datagrid里显示就行

解决方案 »

  1.   

    如果实在不好做就搞一个临时表,把主叫号码先插进去然后用几个语句来更新相应的字段!
    临时表 前面加以个 #,这样在连接断开的时候,sqlserver会自动删除该表,也比较方便!
      

  2.   

    看看这样行不行:
    select sum(时长)/3600 as 市话时长,sum(通话费) as 市话费, 
           sum(时长)/3600 as 长话时长 ,sum(通话费+代收费用) as 长话费 
    from tab 
    group by 主叫号码,起始日期,代收帐目类型
      

  3.   

    To jtkk()
    那样是不行的,如果那样的话市话费那部分就连长途话费中的市话费部分重复统计了一遍
      

  4.   

    select c.主叫号码,c.起始日期,a.市话时长,a.市话费 ,b.长话时长,b.长话费
    from 
        (select distinct  c.主叫号码,c.起始日期,a.市话时长,a.市话费 
         from sheet1 c left join 
            ( select 主叫号码,起始日期,sum(时长) as 市话时长,sum(通话费) as 市话费 from sheet1 where 代收费用<=0
            group by 主叫号码,起始日期 ) a
         on  c.主叫号码=a.主叫号码 and c.起始日期=a.起始日期 
          ) e,
        (select distinct  d.主叫号码,d.起始日期,b.长话时长,b.长话费
         from sheet1 d   left join 
         ( select 主叫号码,起始日期,sum(时长) as 长话时长,sum(通话费) as 长话费 from sheet1 where 代收费用>0
           group by 主叫号码,起始日期 ) b
         on d.主叫号码=b.主叫号码 and d.起始日期=b.起始日期
        ) f
    where  e.主叫号码=f.主叫号码 and e.起始日期=f.起始日期
      

  5.   

    我感觉很麻烦,你有什么高招的话,麻烦通知一声.
    [email protected]
      

  6.   

    先谢谢jtkk和pweixing!
    不好意思,前阵子比较忙,没回来看看。小弟没本事,那时急着交工,那个问题最终还只是简单的对市话部分做了外链接,也就是说当查询条件中的时间段限制内的那段时间刚好只打了长途而没打市话,那么是没有返回的。