我有几张看起来像这样的表
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
但看起来它只计算数据库中所有名称的所有日期。
答案 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
方。