select c.GO_Oper_NO as 操作卡号,count(a.Card_Type) as 临时卡A,sum(a.M_money) as 临时卡A收费,count(b.Card_Type) as 临时卡B,sum(b.M_money) as 临时卡B收费 from (select * from GoCar where Go_Date>='" & Format(DTPicker4.Value, "yyyy-MM-dd HH:mm:ss") & "'and Go_Date<'" & Format(DTPicker5.Value, "yyyy-MM-dd HH:mm:ss") & " ')  as c, (select * from GoCar where Go_Date>='" & Format(DTPicker4.Value, "yyyy-MM-dd HH:mm:ss") & "'and Go_Date<'" & Format(DTPicker5.Value, "yyyy-MM-dd HH:mm:ss") & " 'and Card_Type='临时卡A' ) as a,(select * from GoCar where Go_Date>='" & Format(DTPicker4.Value, "yyyy-MM-dd HH:mm:ss") & "' and Go_Date<='" & Format(DTPicker5.Value, "yyyy-MM-dd HH:mm:ss") & "' and Card_Type='临时卡B') as b group by c.GO_Oper_NO order by c.GO_Oper_NO上面是我用VB编程时赋给ADODC的查询语句,然后在一个Datagride里显示,也可以得到结果,但是明显和表里的实际情况不符合,请哪位高手帮我看看是哪里有问题,谢谢!

解决方案 »

  1.   

    表里有用的就几个字段,一个是操作员卡号,就是Go_Oper_NO,还有一个是通过车辆的卡型(这是个停车场系统)Card_Type,像临时卡A和临时卡B都是这个里面的内容,还有一个就是收费,就是M_money,这个查询语句就是要把某时间段通过的车数和收费总数统计一下问题就是查出来的数据明显比实际的大很多,我想要的当然是和实际的一样啊
      

  2.   

    数据集a、b、c之间缺少where条件,它们之间有什么关联
      

  3.   

    大很多,是多了很多行吗?你几个集合之前啥也没有,起码join on一下吧
      

  4.   

    这样吧,降低一下要求,现在有表GoCar,里面有字段GO_Oper_NO(操作员号码)Card_Type(卡类型)Go_Date(时间)三个字段,Card_Type有两种A和B型,GO_Oper_NO也有若干个,现要求统计一下在某一时间 段内(t1<Go_Date<t2)每个操作员所经手的两种卡的数量,所以最后要用group by GO_Oper_NO来分组一下,看哪位高手 帮忙搞一下!
       
                           加到50分了!
      

  5.   

    SELECT GO_Oper_NO,
    MAX(CASE Card_Type WHEN 'A'  THEN Card_Type_NUM ELSE '0' END) AS A,
    MAX(CASE Card_Type WHEN 'B'  THEN Card_Type_NUM ELSE '0' END) AS B
     FROM(
    SELECT GO_Oper_NO,Card_Type,COUNT(Card_Type) AS Card_Type_NUM
    FROM GoCar 
    WHERE Go_Date>='2009/01/01' AND Go_Date<'2009/10/10'
    GROUP BY GO_Oper_NO,Card_Type
    ) B
    GROUP BY GO_Oper_NO
      

  6.   

    沉默的羔羊的回答已经很好了
    不过看来简化的太多了,其实要求的还有两列,是把A,B两种类型的金额也统计一下,用到表里面的M_money字段,我学着你的方法试了一下,老是有语法错误,因为M_money在表里的类型是money型的,要涉及到类型转换的问题,沉默的羔羊再帮我看一下吧