-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)
你只需要使用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,反之亦然?一致性很重要 - 无论实体存在于哪个表中,我都应该能够通过其列名来识别实体。
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |