如何解决试图找到乘以 DateDiff * 租金天数的语法,然后添加到到期金额列
编写查询,根据 Amount_Due
的 Transaction
和租金天数为 Price
行中的 Car
列赋值。
应付金额将计算为(价格 * 天数), 可以使用取件和返回日期计算天数。
我已经找到了计算 Number of days
的方法:
SELECT DATEDIFF(d,PickupDate,ReturnDate) AS 'Number of days',CAR.Price,Amount_Due
FROM [TRANSACTION]
INNER JOIN CAR ON CAR.CarID = [TRANSACTION].CarID
但我试图用这个语句重新分配值,但它似乎没有做任何事情:
SELECT DATEDIFF(d,Amount_Due
FROM [TRANSACTION]
INNER JOIN CAR ON CAR.CarID = [TRANSACTION].CarID
WHERE Price * DATEDIFF(d,ReturnDate) = Amount_Due;
表架构:
CREATE TABLE [TRANSACTION] (
tID int PRIMARY KEY,cID int REFERENCES CUSTOMER(cID),CarID int REFERENCES CAR(CarID),eID int REFERENCES EMPLOYEE(eID),tDate date NOT NULL,PickupDate date NOT NULL,ReturnDate date NOT NULL
);
CREATE TABLE CAR (
CarID int PRIMARY KEY,Make varchar(30) NOT NULL,Model varchar(30) NOT NULL,type varchar(50) NOT NULL,year date NOT NULL,Price Mmoney NOT NULL
);
解决方法
您的查询将返回 Number of days
,但您尚未完成任何分配。为此,您需要编写一条更新语句。
在我们执行该步骤之前,请确保您已通过在单个选择中包含计算输出和输入字段来正确计算预期 Amount_Due
:
SELECT PickupDate,ReturnDate,DATEDIFF(d,PickupDate,ReturnDate) AS 'Number of days',CAR.Price,Car.Price * DATEDIFF(d,ReturnDate) as Amount_Due
FROM [TRANSACTION]
INNER JOIN CAR ON CAR.CarID = [TRANSACTION].CarID
如果应付金额符合您的预期,则可以使用以下 UPDATE
语句
UPDATE [TRANSACTION]
SET Amount_Due = Car.Price * DATEDIFF(d,t.PickupDate,t.ReturnDate)
FROM [TRANSACTION] t
INNER JOIN CAR ON CAR.CarID = t.CarID
此解决方案针对 MS SQL Server 进行了测试,您的 RDBMS 对于具有联接的 UPDATE
的语法可能略有不同,例如在 MySQL 中,需要在 JOIN
SET /p>
此查询将更新所有记录,在现实世界中,您可以使用某些特定条件对其进行限制,例如 Amount_Due IS NULL
的位置,或者对交易有某种条件,或者您不想再更新交易的汽车。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。