I am working with some traffic data in VB.net using SQL Server. My table name is [Sim VehRecord], columns are:
Record ID
Simulation Sec(s)
Vehicle No
Link No
Lane No
Position (m)
Speed (km/hr)
Basing on the columns 2, 3 and 6, I would like to fill column 7 for each row.
Sample of traffic data shown here:
Record ID Sim Sec(s) Vehicle No Link No Lane No Position(m) Speed (km/hr)
-------------------------------------------------------------------------------
1 0.80 2 74 1 13.42
2 0.80 3 74 2 12.88
3 0.80 4 2 1 2.90
4 1.00 1 73 1 17.97
5 1.00 2 74 1 17.73
6 1.00 3 74 2 17.22
7 1.00 4 2 1 7.22
8 1.20 1 73 1 22.42
9 1.20 2 74 1 22.04
10 1.20 3 74 2 21.57
11 1.20 4 2 1 11.54
I have used following code:
CREATE CLUSTERED INDEX IX_SimVehRecord_VehNo
ON [Sim VehRecord] ([Sim Time (sec)] ASC, [Position (m)] ASC)
UPDATE [Sim VehRecord]
SET [Speed (km/hr)] = (SELECT CONVERT(DECIMAL(7, 2), 3.6 * COALESCE (([Sim VehRecord].[Position (m)] - (SELECT TOP 1 sv.[Position (m)])) / NULLIF(([Sim VehRecord].[Sim Time (sec)] - sv.[Sim Time (sec)]), 0), 0))
FROM [Sim VehRecord] sv
WHERE sv.[Veh No] = [Sim VehRecord].[Veh No]
AND sv.[Position (m)] < [Sim VehRecord].[Position (m)]
AND sv.[Sim Time (sec)] < [Sim VehRecord].[Sim Time (sec)])
But I always get an error:
Subquery returned more than 1 value.
Any assistance will be highly appreciated.
Regards.