3

我正在尝试进行乘法求和,但似乎无法找出为什么它不起作用。我找到了天数,但现在需要将其乘以每日费用。

任何人都可以帮忙吗?

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

3 回答 3

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';
于 2013-01-04T14:23:08.403 回答
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
于 2013-01-04T14:23:58.950 回答
0

根据MySQL - 列别名问题

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

正如其他人已经指出的那样,只需复制datediff公式即可。

于 2013-01-04T14:29:06.733 回答