8

在下面的代码中,我希望AdminDurationandBreakDuration根据 value 的值求和UserID。目前我无法弄清楚,它将所有Durations 的值与ReasonCode7 相加。结果每个UserId都有相同的Duration(不是我想要的!)。

Select SkillTargetID AS UserID,
(SELECT sum(Duration) 
   from [t_Agent_Event_Detail] 
   where ReasonCode = 7
   and DateTime > convert(DATETIME, '2013-01-31 08:00', 21)) as AdminDuration,
(SELECT sum(Duration) 
   from [t_Agent_Event_Detail] 
   where ReasonCode = 6
   and DateTime > convert(DATETIME, '2013-01-31 08:00', 21) 
   and SkillTargetID = [t_Agent_Event_Detail].SkillTargetID) as BreakDuration 
from [t_Agent_Event_Detail]
GROUP BY SkillTargetID
4

1 回答 1

17

如果我理解正确的话,应该是:

SELECT SkillTargetID AS UserID,
       sum(CASE WHEN ReasonCode = 7 THEN Duration ELSE 0 END) as AdminDuration,
       sum(CASE WHEN ReasonCode = 6 THEN Duration ELSE 0 END) as BreakDuration
FROM [t_Agent_Event_Detail]
WHERE DateTime > convert(DATETIME, '2013-01-31 08:00', 21)
GROUP BY SkillTargetID
于 2013-01-31T17:34:34.540 回答