2015-04-03 71 views
0

我有一个很大的查询,我正在使用它来获取关于一个人正在处理的各种项目的统计信息。其中一件事是拉本周一个人将要接受培训班的小时数。TSQL用多个记录加入问题

COALESCE ((SELECT Cast(s.nonprodhrs AS DECIMAL(10, 2)) AS '@count' 
           FROM  dbo.BS_TrainingEvent_Segments AS s 
           INNER JOIN dbo.BS_Training_Trainers AS tr 
           ON tr.segmentID = s.teSegmentID 
           WHERE s.segmentDate >= @StartOfWeek AND s.segmentDate <= @EndOfWeek 
           AND tr.trainerEmpID = t.EmpID 
           ), 0) AS '@hoursThisWeek' 

我遇到的问题是Training_Trainers表中的内连接。有多个记录与segmentID相同,这是抛出错误Subquery returned more than 1 value. This is not permitted when the subquery follows

有没有另一种方法,我可以做到这一点没有连接或调整它的方式,它的工作是否正确?

+0

也许你可以使用“从段选择...其中存在(从训练师处选择1 ..”结构的-kind这里,而不是加入 – 2015-04-03 16:41:14

+0

?正如你所说,你的子查询可以返回多个记录,改变你的查询,以便它只返回你的业务规则规定它应该返回的一条记录 – 2015-04-03 17:33:48

回答

0

我不知道你在做什么,但试试这个。它看起来像你只是想的小时和:

Cast(SUM(s.nonprodhrs) AS DECIMAL(10, 2))....

+0

那么小时工作正常,我可以得到那里它的连接就是问题,它加入一个'segmentID',但它加入的表有多个同一个'segmentID'的实例,这就是为什么它会抛出错误 – SBB 2015-04-03 16:42:12

+0

我不知道段是什么,什么是培训师,为什么有很多细分,为什么你加入这些表。我不知道你的数据,我不知道你想要的输出。我只知道'Subquery不会让你返回超过1个值'。这就是为什么我建议你在你的子查询中聚合数据以获得一个值。 – 2015-04-03 16:48:57

+0

我认为乔治是对的。由于您正在尝试查找某人在培训班(多个)中花费的小时数,因此您应该使用SUM()将总计的所有小时数相加。如果精度很重要,您可能需要CAST()为decimal,然后为SUM。 – Stephan 2015-04-06 13:36:36