使用sum和case函数从多个表中查询

时间:2014-06-11 17:58:19

标签: sql sql-server

我有两个表:TaskUser和PaperMaterial
TaskUser - 包含所有用户一个标题为:User1的列,可以是PaperMaterial表中的用户 PaperMaterial - 多列表,其中可以在多个日期为同一用户多次写入数据。

我想要完成的是一个查询,它将显示给定日期范围内的所有用户及其总页数,无论他们是否在纸质资料表中都有数据。

IE:

Select Assigned_To, 
Case
When PaperMaterial.Assigned_To = TaskUser.User1 then sum(Page_Count)
When PaperMaterial.Assigned_To <> TaskUser.User1 then '0'
End as Count1
From PaperMaterial 
Inner Join TaskUser
on TaskUser.User1 = PaperMaterial.Assigned_To
Where Date_Assigned between ('06/09/2014') and ('06/13/2014')
Order By Assigned_To

现在,显然这段代码不起作用,因为我是SQL的新手,我还不是很好。但是,您应该能够在此处查看目标。这是:

迈克0 鲍勃200
Jen 0
贝蒂125
等等,等等

谢谢

1 个答案:

答案 0 :(得分:1)

我认为这会解决问题

SELECT a.User1, ifnull(sum(Page_Count),0) AS Count1
From TaskUser AS a
LEFT JOIN PaperMaterial AS b
ON b.Assigned_To = a.User1
Where Date_Assigned between DATE('2014-06-09') AND DATE('2014-06-13')
GROUP BY a.User1
Order By a.User1

您可能需要调整Date_Assigned逻辑,具体取决于您的日期格式......但您使用的当前条款并没有多大意义。假设您的Date_Assigned变量被格式化为日期或日期时间,我认为上面的那个应该完成这项工作