根据不同的日期从同一列中选择计数

时间:2016-11-21 16:48:58

标签: sql sql-server

我有几张看起来像这样的表

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

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

1 个答案:

答案 0 :(得分:3)

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

取出ELSE 0

COUNT会忽略NULLs,但ELSE 0会分配一个值。完全取出它意味着它不会计算声明的ELSE方。