试试: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
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、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万,这样你统计的时候,直接统计到中间表就够了。
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)
果然是高手,这个结果完全正确
TO swordmanli
你讲得也很有道理,看来原来我的表设计不是太合理