2016-11-21 68 views
0

我有几个表看起来像这样选择计数

Table1 
Name varchar 
ID int 

Table2 
ID int 
Run_Date datetime 

我想在一列中选择名称,然后日期的计数变成2列。 1列将是上周每个姓名的所有日期,第二列将是本周的每个姓名的所有计数。结果看起来像这样的事情

所以,如果我的表看起来像这样

Table1 
Name1 1 
Name2 2 
Name3 3 

Table2 
1 2016-11-21 8:40:23.570 
2 2016-11-21 8:50:23.570 
1 2016-11-21 9:40:23.570 
1 2016-11-21 10:40:23.570 
1 2016-11-16 10:40:23.570 
2 2016-11-16 10:40:23.570 
3 2016-11-21 8:40:23.570 

我的结果会看起来像

Name  This_Week  Last_week 
Name1  3    1 
Name2  1    1 
Name3  1    0 

我可以分别获得价值做

WHERE DATEPART(wk, Run_Date) = DATEPART(wk, GETDATE()) AND DATEPART(yy, Run_Date) = DATEPART(yy, GETDATE()) 

我只是在一周后添加-1来获取上周的所有内容。我怎样才能让这些在同一张桌子上并排显示?

我试图做一个CASE

COUNT(CASE WHEN DATEPART(wk, Run_DATE) = DATEPART(wk, GETDATE()) AND DATEPART(yy, Run_Date) = DATEPART(yy, GETDATE()) THEN 1 ELSE 0 END) AS This_Week 

但它看起来像它只是计算的所有名称在数据库中的所有日期。

回答

3
​​

拿出ELSE 0

COUNT将忽略NULLs,但ELSE 0将分配一个值。完全取出将意味着它不会计入陈述的ELSE一侧。

+1

感叹。我应该看到这一点。感谢马特 – maltman

+0

没问题,我很确定,很容易忽略自己做了几次。另一种解决方法是将其更改为SUM(...),然后按照原样保留case语句。计数是很好的,但例如,如果你想计算DISTINCT ID,日期等,因为与SUM不能完成 – Matt