我有以下查询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