2013-01-04 56 views
3

我试图做一个乘法总和,但似乎无法找出它为什么不工作。 我已经找到了天数,但现在需要将此乘以每日费用。SQL乘法查询

任何人都可以帮忙吗?

SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`, 
`Total`*Daily_Charge AS `Done` FROM `Car`,`Contract` WHERE `Contract_Id`="1"; 
+0

汽车与合同之间没有加入条件? –

回答

5

只能在查询的后面的子句中使用别名,而不能在select子句本身中使用别名。使用

SELECT `Daily_Charge`, 
     DATEDIFF(End_Date,Start_Date) AS `Total`, 
     DATEDIFF(End_Date,Start_Date) * Daily_Charge AS `Done` 
FROM `Car`,`Contract` 
WHERE `Contract_Id`='1'; 
+2

谢谢,几乎在那里:P – Steveo

+0

'+ 1'谢谢!学到了新东西! :) –

1

不能在另一列定义中使用的列别名,你需要重新写公式:

SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`, 
     DATEDIFF(End_Date,Start_Date)*Daily_Charge AS `Done` 
FROM `Car`,`Contract` 
WHERE `Contract_Id`="1" 

或者,你可以做一个子查询的公式,并使用这些列计算,如:

SELECT `Daily_Charge`, `Total`, `Total`*Daily_Charge AS `Done` 
FROM (SELECT `Daily_Charge`, DATEDIFF(End_Date,Start_Date) AS `Total`, 
     FROM `Car`,`Contract` 
     WHERE `Contract_Id`="1") as Source 
0

根据MySQL - Problems with Column Aliases

可以在查询选择列表中使用别名来为列指定不同的名称。您可以使用别名GROUP BYORDER BY,或HAVING子句指柱:
...
标准SQL不允许在WHERE 条款列别名引用。施加此限制是因为在评估WHERE子句时,列值可能尚未确定。
...

正如其他人已经指出的那样,只是重复datediff公式。