3

掛け算をしようとしていますが、なぜうまくいかないのかわかりません。日数はわかりましたが、これに 1 日あたりの料金を掛ける必要があります。

誰でも助けることができますか?

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 BY、またはHAVING句でエイリアスを使用して、列を参照できます。
...
標準 SQL では、WHERE句での列エイリアスへの参照は許可されていません。この制限が課されるのは、WHERE句が評価されるときに、列の値がまだ決定されていない可能性があるためです。
...

他の人がすでに指摘したように、datediff式を複製するだけです。

于 2013-01-04T14:29:06.733 に答える