2013-02-01 61 views
0

我越來越與having子句我的一個問題,這是我得到的錯誤:集團通過不會工作

未知列tbl_quotes.taxhaving clause

和我的代碼:

SELECT tbl_quotes.docnumber          AS docNumber, 
     tbl_quotes.date           AS date, 
     Sum(tbl_quotesitems.price) * ((tax + tax2/100) + 1) AS total, 
     (Sum(tbl_quotesitems.price) * ((tax + tax2/100) + 1)) - 
      (SELECT Sum(tbl_payments.amount) 
      FROM tbl_payments 
      WHERE tbl_payments.quoteid = tbl_quotes.id 
      )              AS amtOwing 

FROM tbl_quotes 
     INNER JOIN tbl_quotesitems 
       ON tbl_quotesitems.quoteid = tbl_quotes.id 
GROUP BY tbl_quotes.id 
HAVING (Sum(tbl_quotesitems.price) * (((tbl_quotes.tax + tbl_quotes.tax2)/
              100) 
               + 
               1)) < (SELECT Sum( 
                 tbl_payments.amount) 
                 FROM tbl_payments 
                 WHERE 
       tbl_payments.quoteid = tbl_quotes.id) 

謝謝

+4

我認爲這可能是我見過 – GGio

+0

它應該是tbl_payments.tax或tbl_quotesItems.tax最醜陋的查詢? – Alepac

+0

@GGio那好些? – Kermit

回答

0

可能使用連接重寫並避免代碼和計算的重複:
(假設:表tbl_quotes具有id作爲主鍵)

SELECT q.docnumber AS docNumber, 
     q.date  AS date, 
     qi.sum_price * ((q.tax + q.tax2/100) + 1) 
        AS total, 
     qi.sum_price * ((q.tax + q.tax2/100) + 1) - p.sum_amount 
        AS amtOwing 
FROM tbl_quotes AS q 
     INNER JOIN 
        (SELECT quoteid, 
          SUM(price) AS sum_price 
        FROM  tbl_quotesitems 
        GROUP BY quoteid 
       ) AS qi 
       ON qi.quoteid = q.id 
     INNER JOIN 
        (SELECT quoteid, 
          SUM(amount) AS sum_amount 
        FROM  tbl_payments 
        GROUP BY quoteid 
       ) AS p 
       ON p.quoteid = q.id 
WHERE qi.sum_price * (((q.tax + q.tax2)/100) + 1) 
     < p.sum_amount ; 
+0

尚未檢查查詢,但非常感謝您演示正確格式如何使代碼可讀! – thaJeztah

+0

@thaJeztah thnx。 –