2015-04-03 66 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