【发布时间】:2019-12-12 03:36:44
【问题描述】:
我正在使用 SQL Server 在 VB.net 中处理一些流量数据。我的表名是[Sim VehRecord],列是:
Record ID
Simulation Sec(s)
Vehicle No
Link No
Lane No
Position (m)
Speed (km/hr)
根据第 2、3 和 6 列,我想为每一行填写第 7 列。
此处显示的流量数据示例:
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
我使用了以下代码:
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)])
但我总是得到一个错误:
子查询返回超过 1 个值。
我们将不胜感激。
问候。
【问题讨论】:
-
错误很明显...您在更新语句中使用的子查询返回多行并且您更新集合子句期望返回 1 行。可以单独运行select语句查看结果
标签: sql-server vb.net