2011-03-26 79 views
0
SELECT 
SUM(p.mc_gross) AS totalsales, 
SUM(p.tax) AS totlatax, 
(SELECT SUM(totalamount) FROM table1 
    WHERE DATE_FORMAT(paydate, '%d-%m-%Y') = 
    DATE_FORMAT(p.payment_date, '%d-%m-%Y')) AS totalagentsales, 
DATE_FORMAT(p.payment_date, '%d-%m-%Y') AS filter, 
(p.mc_gross - p.tax - (SELECT SUM(totalamount) FROM table1)) AS TotalRevenue, 
(p.tax + (SELECT SUM(totalamount) FROM table1)) AS TotalPayment 
FROM table2 AS p GROUP BY filter LIMIT 0, 30 

此查询总和不会产生正确的结果。我做了TotalRevenue的减法和TotalPayment的加法。这个结果是不正确的。总结表中的列不会产生正确的结果

这是我的输出:

totalsales totlatax totalagentsales filter  TotalRevenue TotalPayment 
38.99  3.54  NULL    11-03-2011 33.152   4.54 
6   0.09  NULL    14-02-2011 3.612   1.09 
2177.46  197.96  0.899    14-03-2011 1977.202  198.96 
299.94  27.27  1.399    15-03-2011 270.372  28.27 
19.98  1.82  NULL    21-01-2011 15.862   2.82 
3   0.27  NULL    22-01-2011 0.432   1.27 
14.77  1.82  NULL    28-02-2011 10.652   2.82 
+0

的问题需要更多的解释 – Harish 2011-03-26 06:09:46

+0

请告诉我什么,我想解释一下.. 日期明智的付款条目将多于一次在表中我会拿起日期明智的日期想输出只有一次 – Mohan 2011-03-26 06:12:26

回答

0

不知道你的表的布局,在表中的数据,也没有你期待与你有什么,我只是猜测这里是什么东西。首先,您可能需要重复使用SUM作为您访问mc_grosstax的其他实例。另外,我认为你使用子查询会让你感到困惑,特别是SELECT SUM(totalamount) FROM table1的两个实例。我想你想限制计算这些总和时使用的行,与你如何处理totalagentsales相似。您可以重复使用totalagentsales值,如果你将它插入FROM条款如下:

SELECT SUM(p.mc_gross) AS totalsales, SUM(p.tax) AS totlatax, 
     q.totalagentsales, DATE_FORMAT(p.payment_date, '%d-%m-%Y') AS filter, 
     (SUM(p.mc_gross) - SUM(p.tax) - q.totalagentsales) AS TotalRevenue, 
     (SUM(p.tax) + q.totalagentsales) AS TotalPayment 
FROM table2 AS p, 
    (SELECT SUM(totalamount) totalagentsales FROM table1 
     WHERE DATE_FORMAT(paydate, '%d-%m-%Y') = DATE_FORMAT(p.payment_date, '%d-%m-%Y') 
    ) AS q 
GROUP BY filter 
LIMIT 0, 30 

编辑

SELECT SUM(p.mc_gross) AS totalsales, SUM(p.tax) AS totlatax, 
     q.totalagentsales, DATE_FORMAT(p.payment_date, '%d-%m-%Y') AS filter, 
     (SUM(p.mc_gross) - SUM(p.tax) - q.totalagentsales) AS TotalRevenue, 
     (SUM(p.tax) + q.totalagentsales) AS TotalPayment 
FROM table2 AS p 
    LEFT JOIN (SELECT SUM(totalamount) totalagentsales, 
         DATE_FORMAT(paydate, '%d-%m-%Y') AS filter 
       FROM table1 GROUP BY filter) AS q 
       ON DATE_FORMAT(p.payment_date, '%d-%m-%Y') = q.filter 
GROUP BY filter 
LIMIT 0, 30 
+0

对于您的回复谢谢 p.payment_date未知的列错误来了 – Mohan 2011-03-26 10:21:17

+0

@莫汉,对不起,似乎对外部查询中表的列的引用是否定的...... ^^;尝试编辑。 – jswolf19 2011-03-26 13:35:02