【发布时间】:2015-06-02 10:34:02
【问题描述】:
我正在创建一个简单的数据库,其中包含允许我(使用 excel)分析我的冷水、温水、电等的消耗量以及这些数据的费用。
我将在 excel 中使用 useforms 将数据插入数据库,因此我创建了一个 SQL 过程。下面是插入冷水数据的示例。
我将两个重要参数传递给程序:@Price 和@Reading。 在 [冷水] 表中,我还有列:消耗和成本。
我想要做的是首先计算当月的消耗量(作为实际的@Reading - 以前的读数)。然后,计算出当前消耗后,我想使用该值并计算成本(当前消耗 * @Price)。
我已经设法使用子查询计算当前消耗和成本。但我很好奇是否(以及如何可能)我可以直接使用尚未插入的计算值(当前消耗)来计算一个插入中的另一个(成本)而不是使用子查询。
我想到的唯一想法是编写一个在此插入之后执行的触发器。 另外我不知道如何使用此过程将第一行插入表中,而不是手动插入第一行。
如果有任何提示,我将不胜感激。
@Date AS DATE,
@Reading AS DECIMAL (6,3),
@Price AS DECIMAL (6,2),
@Unit AS VARCHAR (5)
AS
BEGIN
SET NOCOUNT ON
-- Cold water
IF NOT EXISTS
(
SELECT Date
FROM [Cold water]
WHERE Date = @Date
)
BEGIN
INSERT INTO dbo.[Cold water]
(
Date,
Year,
Month,
Day,
Reading,
Consumption,
Unit,
Price,
Cost
)
VALUES
(
@Date,
(SELECT YEAR(@Date)),
(SELECT MONTH(@Date)),
(SELECT DAY(@Date)),
@Reading,
(SELECT
(@Reading - (SELECT Reading FROM [Cold water] WHERE ID = (SELECT MAX(ID) FROM [Cold water]))
)
),
@Unit,
@Price,
(SELECT @Price* (SELECT (@Reading - (SELECT Reading FROM [Cold water] WHERE ID = (SELECT MAX(ID) FROM [Cold water])
)
)
)
)
)
END
【问题讨论】:
-
这适用于哪个 RDBMS?请添加标签以指定您使用的是
mysql、postgresql、sql-server、oracle还是db2- 或完全其他的东西。 -
我已添加 - SQL Server。
标签: sql sql-server stored-procedures calculated-columns