Sql server 具有多条记录的TSQL连接问题
我有一个很大的查询,用来获取一个人正在从事的各种项目的统计数据。其中一个原因是本周一个人将参加培训课程的小时数Sql server 具有多条记录的TSQL连接问题,sql-server,tsql,stored-procedures,sql-server-2012,Sql Server,Tsql,Stored Procedures,Sql Server 2012,我有一个很大的查询,用来获取一个人正在从事的各种项目的统计数据。其中一个原因是本周一个人将参加培训课程的小时数 COALESCE ((SELECT Cast(s.nonprodhrs AS DECIMAL(10, 2)) AS '@count' FROM dbo.BS_TrainingEvent_Segments AS s INNER JOIN dbo.B
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,该记录抛出的错误子查询返回的值超过1。当子查询出现时,这是不允许的
是否有其他方法可以在不使用连接的情况下完成此操作,或者以正确的方式调整它?我不知道您在做什么,但请尝试此方法。看起来您只需要小时数:
CastSUMs.nonprodhrs为小数10,2..也许您可以使用select。。。从存在的片段中,从培训师中选择1-这里是什么样的结构而不是连接?正如您所说,子查询可以返回多个记录。更改您的查询,使其只返回您的业务规则规定它应该返回的一条记录。好的,小时工作正常,我可以在有单个段的情况下得到它。这就是问题所在。它在一个segmentID上连接,但是它连接的表有同一个segmentID的多个实例,这就是它抛出错误的原因我不知道什么是segment,什么是trainer,为什么有很多segment,为什么要连接这些表。我不知道你的数据,我不知道你想要的输出。我只知道子查询不会让您返回超过1个值。这就是为什么我建议您在子查询中聚合数据,以便只得到一个值。我认为George是对的。由于您正在尝试查找某人在培训课程中花费的小时数,因此您应该使用SUM将所有小时相加,得出总小时数。如果精度很重要,您可能希望转换为十进制,然后求和。