检索所有用户的结果

-3 sql-server stored-procedures

我有一个查询,它返回一个月的特定用户总小时数。我想为组织中的所有用户返回。

UserRegistration 表包含 UserID。

我的特定用户代码是,

 SELECT isnull(SUM(isnull([1],0))+SUM(isnull([2],0))+SUM(isnull([3],0))+
               SUM(isnull([4],0))+SUM(isnull([5],0))+SUM(isnull([6],0))+SUM(isnull([7],0))
              +SUM(isnull([8],0))+SUM(isnull([9],0))+SUM(isnull([10],0))+SUM(isnull([11],0))+
               SUM(isnull([12],0))+SUM(isnull([13],0))+SUM(isnull([14],0))+SUM(isnull([15],0))+
               SUM(isnull([16],0))+SUM(isnull([17],0))+SUM(isnull([18],0))+SUM(isnull([19],0))+
        SUM(isnull([20],0))+SUM(isnull([21],0))+SUM(isnull([22],0))+SUM(isnull([23],0))+
        SUM(isnull([24],0))+SUM(isnull([25],0))+SUM(isnull([26],0))+SUM(isnull([27],0))+
        SUM(isnull([28],0))+SUM(isnull([29],0))+SUM(isnull([30],0))+SUM(isnull([31],0)), 0)
     FROM dbo.timesheet where month ='August' and [year] =2015 and [Task ID] in(select
 TaskID from ManageTasks where TeamMemberUserID = 136)
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

你只需要使用GROUP BY

SELECT mt.TeamMemberUserID ---, <all those crazy SUM expressions>
FROM dbo.timesheet AS t
INNER JOIN dbo.Managetasks AS mt
ON t.[Task ID] = mt.TaskID
-- ... <WHERE clause> ...
GROUP BY mt.TeamMemberUserID;
Run Code Online (Sandbox Code Playgroud)

如果您需要用户名,有几种方法可以做到这一点,这里是一种:

SELECT u.UserName --, <all those crazy SUM expressions>
FROM dbo.timesheet AS t
INNER JOIN dbo.Managetasks AS mt
ON t.[Task ID] = mt.TaskID
INNER JOIN dbo.UserRegistration AS u
ON mt.TeamMemberUserID = u.UserID
-- ... <WHERE clause> ...
GROUP BY u.UserName;
Run Code Online (Sandbox Code Playgroud)

由于显然您希望每个用户都有一行,即使是那些在所选月份中没有任何任务记录小时数的用户,请尝试:

SELECT u.UserName --, <all those crazy SUM expressions>
FROM dbo.UserRegistration AS u
LEFT OUTER JOIN dbo.Managetasks AS mt
ON mt.TeamMemberUserID = u.UserID
LEFT OUTER JOIN dbo.timesheet AS t
ON t.[Task ID] = mt.TaskID
-- ... <WHERE clause> ...
GROUP BY u.UserName;
Run Code Online (Sandbox Code Playgroud)

我确实建议列名更加一致。为什么它Task ID在一张桌子和TaskID另一张桌子上?为什么要UserID扩展到TeamMemberUserID一张表?是否有可能有一个TeamMemberUserIDwho 不是 a UserID,反之亦然?一致性很重要 - 无论实体存在于哪个表中,我都应该能够通过其列名来识别实体。