Sql 根据不同日期从同一列中选择计数
我有两张像这样的桌子Sql 根据不同日期从同一列中选择计数,sql,sql-server,Sql,Sql Server,我有两张像这样的桌子 Table1 Name varchar ID int Table2 ID int Run_Date datetime 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:
Table1
Name varchar
ID int
Table2
ID int
Run_Date datetime
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
我尝试在一列中选择名称,然后将日期计数分为两列。第一列是上周每个姓名的所有日期,第二列是本周每个姓名的所有计数。结果会像这样
Table1
Name varchar
ID int
Table2
ID int
Run_Date datetime
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
如果我的桌子看起来像这样
Table1
Name varchar
ID int
Table2
ID int
Run_Date datetime
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,以获得上周的所有内容。我怎样才能让这些东西并排出现在同一张桌子上
我试过做一个案子
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
但看起来它只是计算数据库中所有姓名的所有日期
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
端
取出ELSE 0
COUNT
将忽略NULLs
但ELSE 0
将分配一个值。把它全部去掉就意味着它不会计算语句的或部分。叹气。我应该看到的。谢谢,没问题,这很容易被忽视,我相信我自己也做过几次。另一种修复方法是将其更改为SUM(…),并保留case语句。计数是很好的,例如,如果您想计算不同的ID、日期等,而和总和一样,您无法完成这些。我应该看到的。谢谢,没问题,这很容易被忽视,我相信我自己也做过几次。另一种修复方法是将其更改为SUM(…),并保留case语句。计数是很好的,例如,如果您想计算不同的ID、日期等,而使用SUM则无法完成