试试:SELECT Sum( distinct c.billMon) AS Mon FROM Kp_Table_List a
 INNER JOIN Kp_Bill c ON a.BillCode=c.BillCode
 INNER JOIN Kp_Table b ON a.TabCode = b.TabCode
 WHERE b.RoadCode='51' AND a.isBill=1 AND c.isPay = 0

解决方案 »

  1.   

    我认为楼主的这种情况是无法得到如上要求的结果的,因为逻辑上有矛盾三个库关系如下 
    1、kp_bill 与kp_table_list是根据billcode一对多的关系
    2、kp_table_list 与kp_table是根据tabcode多对一的关系kp_bill 一对多 kp_table_list 多对一 kp_table,现在根据kp_table统计kp_bill,这是做不到的,因为关系已经打乱了
    例如:kp_table 中有A, B, kp_table_list中分解成A1,A2 和B1, B2,然后到了kp_bill重新组合成C1对应A1、B1, C2对应A2、B2,那现在项统计A在kp_bill中的数据是无法得到了,因为你不知道A1,A2个在C1,C2中占据的比例。结论,楼主必须重新设计数据结构
    建议:在中间表kp_table_list也存储你要统计的数据billmon,如上例如果C1.billmon = 100万,那么A1.billmon + B1.billmon 也要等于100万,这样你统计的时候,直接统计到中间表就够了。
      

  2.   

    --没有数据,根据楼主的查询语句写的结果SELECT Sum(c.billMon) AS Mon
    FROM Kp_Bill c
    where c.isPay = 0
    and exists(
    SELECT 1 FROM Kp_Table_List a
    INNER JOIN Kp_Table b ON a.TabCode = b.TabCode 
    WHERE b.RoadCode='51' AND a.isBill=1
    and a.BillCode=c.BillCode)
      

  3.   

    TO zjcxc(邹建)
    果然是高手,这个结果完全正确
    TO swordmanli
    你讲得也很有道理,看来原来我的表设计不是太合理