在Visual Studio中计算SQL数据库记录之间的数据
我正在尝试计算记录的燃油加满时的每加仑英里数。我的表格由以下部分组成:在Visual Studio中计算SQL数据库记录之间的数据,sql,visual-studio,Sql,Visual Studio,我正在尝试计算记录的燃油加满时的每加仑英里数。我的表格由以下部分组成: FillUp(CarID, Date, ODReading, Gallons, StopGo, Highway, FillupID, MPG) 我想从之前的记录中减去ODReading,然后用加仑除以这个计算值 在Visual Studio 2008的列属性(公式)部分中,如何在记录之间工作以实现这一点?看起来,您为此任务选择了错误的工具。 SQL server及其接口设计为分别在每一行上操作 我会尝试使用托管(c#或vb
FillUp(CarID, Date, ODReading, Gallons, StopGo, Highway, FillupID, MPG)
我想从之前的记录中减去ODReading,然后用加仑除以这个计算值
在Visual Studio 2008的列属性(公式)部分中,如何在记录之间工作以实现这一点?看起来,您为此任务选择了错误的工具。 SQL server及其接口设计为分别在每一行上操作
我会尝试使用托管(c#或vb.net)代码来完成此任务。看起来,您为此任务选择了错误的工具。 SQL server及其接口设计为分别在每一行上操作
我会尝试使用托管(c#或vb.net)代码来实现这一点。查询结果集中的行本身没有任何顺序。没有“记录之间”
您需要使用“orderby”子句将行放入序列中。然后你可以尝试各种各样的技巧。例如,如果您有一个“sequence”列,您可以对B.sequence=a.sequence+1进行自连接。这将在结果集中为您提供一行,其中包含来自“当前”行和“以前”行的数据。查询结果集中的行本身没有任何顺序。没有“记录之间”
您需要使用“orderby”子句将行放入序列中。然后你可以尝试各种各样的技巧。例如,如果您有一个“sequence”列,您可以对B.sequence=a.sequence+1进行自连接。这将在结果集中为您提供一行,其中包含来自“当前”行和“以前”行的数据。您可以使用窗口查询非常轻松地做到这一点:
WITH FillUp_CTE AS
(
SELECT
CarID, Date, ODReading,
ROW_NUMBER() OVER (PARTITION BY CarID ORDER BY Date) AS RowNum
FROM FillUp
)
SELECT f1.CarID, f1.Date, (f2.ODReading - f1.ODReading) / f1.Gallons AS Mileage
FROM FillUp_CTE f1
INNER JOIN FillUp_CTE f2
ON f2.CarID = f1.CarID
AND f2.RowNum = f1.RowNum + 1
仅使用计算列无法完成此操作。实际上,您需要按照上述方式编写SQL。使用窗口查询可以非常轻松地完成此操作:
WITH FillUp_CTE AS
(
SELECT
CarID, Date, ODReading,
ROW_NUMBER() OVER (PARTITION BY CarID ORDER BY Date) AS RowNum
FROM FillUp
)
SELECT f1.CarID, f1.Date, (f2.ODReading - f1.ODReading) / f1.Gallons AS Mileage
FROM FillUp_CTE f1
INNER JOIN FillUp_CTE f2
ON f2.CarID = f1.CarID
AND f2.RowNum = f1.RowNum + 1
仅使用计算列无法完成此操作。实际上,您需要像上面那样编写SQL。当您可以为此创建查询时,toy为什么要在C中这样做 差不多
DECLARE @FillUp TABLE(
CarID INT,
Date DATETIME,
ODReading FLOAT,
Gallons FLOAT,
StopGo FLOAT,
Highway VARCHAR(20),
FillupID INT,
MPG FLOAT
)
INSERT INTO @FillUp (CarID, Date, ODReading, Gallons) SELECT 1, '01 Jan 2010', 100, 20
INSERT INTO @FillUp (CarID, Date, ODReading, Gallons) SELECT 1, '01 Jan 2010', 150, 30
INSERT INTO @FillUp (CarID, Date, ODReading, Gallons) SELECT 1, '02 Jan 2010', 250, 30
;WITH ODOs AS (
SELECT *,
(
SELECT TOP 1
ODReading
FROM @FillUp
WHERE CarID = fu.CarID
AND ODReading > fu.ODReading
ORDER BY ODReading
) NextOD
FROM @FillUp fu
)
SELECT *,
(NextOD - ODReading) / Gallons CalculatedMPG
FROM ODOs
当您可以为其创建查询时,toy为什么要在C#中执行此操作 差不多
DECLARE @FillUp TABLE(
CarID INT,
Date DATETIME,
ODReading FLOAT,
Gallons FLOAT,
StopGo FLOAT,
Highway VARCHAR(20),
FillupID INT,
MPG FLOAT
)
INSERT INTO @FillUp (CarID, Date, ODReading, Gallons) SELECT 1, '01 Jan 2010', 100, 20
INSERT INTO @FillUp (CarID, Date, ODReading, Gallons) SELECT 1, '01 Jan 2010', 150, 30
INSERT INTO @FillUp (CarID, Date, ODReading, Gallons) SELECT 1, '02 Jan 2010', 250, 30
;WITH ODOs AS (
SELECT *,
(
SELECT TOP 1
ODReading
FROM @FillUp
WHERE CarID = fu.CarID
AND ODReading > fu.ODReading
ORDER BY ODReading
) NextOD
FROM @FillUp fu
)
SELECT *,
(NextOD - ODReading) / Gallons CalculatedMPG
FROM ODOs
请更具体地说明您所指的是哪些“列属性”。请更具体地说明您所指的是哪些“列属性”。并且可能在f2.ODReading-f1.ODReading X-)周围使用()很好。。。对这些编辑要更加小心。修正了。可能在f2.ODReading-f1.ODReading X-)附近使用()很好的捕获。。。对这些编辑要更加小心。固定的。