我有以下查詢mysql的別名給未知列
SELECT
ROUND(SUM(IF(`VAT`<1,(`Unit_Cost`*`Quantity`)*`ExchangeRate`, 0))+SUM(DISTINCT `VATValue`),2)
FROM
`salesinvoice`
LEFT JOIN `salesinvoice_products`
ON `salesinvoice`.`SalesInvoice_id` = `salesinvoice_products`.`SalesInvoice_id`
的問題是,查詢給了我一個不正確的結果,因爲VAT
正被複制,因爲這是一個一對多(請記住這個不是問題)。 所以我試了
ROUND(SUM(IF(SUM(DISTINCT `VAT`)<1,(`Unit_Cost`*`Quantity`)*`ExchangeRate`, 0))+SUM(DISTINCT `VATValue`),2)
哪些也沒有工作。顯然你不能這樣使用DISTINCT。 所以這是我嘗試使用別名的地方,但是當我嘗試這個時,我得到了未知列。所以這裏是我的最終代碼,這是我問的問題。
SELECT
SUM(DISTINCT `VAT`) as v,
ROUND(SUM(IF(v<1,(`Unit_Cost`*`Quantity`)*`ExchangeRate`, 0))+SUM(DISTINCT `VATValue`),2)
FROM
`salesinvoice`
LEFT JOIN `salesinvoice_products`
ON `salesinvoice`.`SalesInvoice_id` = `salesinvoice_products`.`SalesInvoice_id`
正如你可以看到我把SUM(DISTINCT VAT
)作爲一個單獨的列V和希望使用該結果的計算列,但它不工作,我不知道爲什麼。
Viki888建議使用子查詢,所以我現在試過這個,但我仍然收到未知的列錯誤。也許我做錯了。這裏是更新的代碼
SELECT
(SELECT SUM(DISTINCT `vat`) FROM `salesinvoice`)as v,
ROUND(SUM(IF(v<1,(`Unit_Cost`*`Quantity`)*`ExchangeRate`, 0))+SUM(DISTINCT `VATValue`),2)
FROM `salesinvoice`
LEFT JOIN `salesinvoice_products`
ON `salesinvoice`.`SalesInvoice_id` = `salesinvoice_products`.`SalesInvoice_id`
正確我認爲我接近解決方案。這不會給我一個錯誤,但不會給我我想要的結果。我與該行的ID來代替3號,但我不知道如何將ID傳遞到子查詢
SELECT
ROUND(SUM(IF(v<1,(`Unit_Cost`*`Quantity`)*`ExchangeRate`, 0))+SUM(DISTINCT `VATValue`),2) FROM `salesinvoice`
INNER JOIN
(SELECT `vat` as v FROM `salesinvoice` WHERE `SalesInvoice_id`=3)as j
LEFT JOIN `salesinvoice_products`
ON `salesinvoice`.`SalesInvoice_id` = `salesinvoice_products`.`SalesInvoice_id`
這一個是讓我瘋狂。我終於發現最好的方法是做一個內聯SELECT,但問題是這樣的。我仍然得到一個比我應該得到的更高的數字。所以有些東西在某處被重複。我開始認爲我的增值稅可能不是問題。
SELECT DISTINCT
ROUND(SUM(IF((SELECT DISTINCT si2.`VAT` FROM `salesinvoice` as si2 WHERE si2.`SalesInvoice_id`=si.`SalesInvoice_id`)<1,(`Unit_Cost`*`Quantity`)*`ExchangeRate`, 0))+SUM(DISTINCT `VATValue`),2) as total
FROM `salesinvoice` as si
LEFT JOIN `salesinvoice_products` as sip
ON si.`SalesInvoice_id` = sip.`SalesInvoice_id`
你可以發佈一些樣本數據以及預期的結果嗎? –
嘗試嵌套查詢。首先在**內部查詢**中將** SUM DISTINCT **,然後在**外部查詢**中,您可以訪問值** v **。 – Viki888
您不能將聚合列的結果用作同一查詢的一部分(除了在HAVING子句中)。 @ viki888建議是一種方式。 – PaulF