2016-11-21 70 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