执行子查询时获取错误"Subquery returned more than 1 value."



执行子查询时出现以下错误

子查询返回了多个值。当子查询跟随=,!=<lt;=>gt;=或者当子查询用作表达。

有人能告诉我哪里做错了吗。当我尝试在查询中使用Top 1时,我得到了所有行的ElapsedSecond =0

这是我的查询

SELECT [Id] 
,[LogTime]
,[StartTime]
,[Source]
,[Type]
,[User]    
,ElapsedSecond =
(SELECT 
ABS(ISNULL(DATEDIFF(second, nextStartTime, StartTime), 0)) AS Elapsedsecond
FROM   
(
SELECT  starttime,
LEAD(StartTime) OVER ( Partition by [Source], [User] ORDER BY StartTime) 
AS  nextStartTime
from [dbo].[Log] 
) l
)
FROM  [dbo].[Log]

预期输出应为

开始时间源运行秒I>abcdScde
Id日志时间类型用户
12021-02-24 01:15:44.647Pabc
22021-02-24 01:15:46.6472021-02401:15:46.647
32021-02-24 01:15:48.647PE0
42021-02-24 01:15:50.647Defg0
52021-02-24 01:15:52.647C0

错误的原因是您没有将子查询与外部查询关联起来,以确保每行只有一个值。但是,我认为您可以使用派生表子查询而不是关联子查询来实现所需的功能。当然,以下所提供的数据会产生所需的结果。

SELECT
[Id] 
, [LogTime]
, [StartTime]
, [Source]
, [Type]
, [User]    
, ABS(ISNULL(DATEDIFF(second, nextStartTime, StartTime), 0)) AS Elapsedsecond
FROM (
SELECT Id, LogTime, StartTime, [Source], [Type], [User]
, LEAD(StartTime) OVER (Partition by [Source], [User] ORDER BY StartTime) AS nextStartTime
FROM dbo.[Log] 
) X
ORDER BY id;

最新更新