2011-09-28 207 views
0

在這些類型的SQL語句中,我似乎總是自問自問。這是我試圖完成的。SQL Select Count With Where Where Statement

我的示例表

Name Date Type 
Bob  9/28/11 1 
Bob  9/27/11 1 
Bob  9/28/11 2 
Debra 9/28/11 1 

我想寫一個SQL語句會給我所有的名字,他們的總數發生,然後一個日期過濾器。我會用一種完全錯誤的語法寫出一個可靠的聲明,但我認爲它會傳達我正在嘗試做的事情......我想。

SELECT Name, Count(*) As Total 
FROM Table 
GROUP BY Name, Total 
WHERE Date = Today (I'm aware you can't do a WHERE in a GROUP BY) AND Type = 1 

本質上,我想找回一組數據來顯示名稱,今天有多少個類型1的實例。

我不認爲我正在尋找適當的問題,以便能夠有效地對我自己進行研究,可能是因爲我的寫法不正確。

任何幫助,將不勝感激!

+0

什麼是你想要的輸出? –

+0

@AbeMiessler 這將是一個簡單的結果集名稱與該名稱的總數,然後到下一個名稱等 我相信這是一個簡單的語法錯誤,我只是沒有看到它。下面的人解釋說WHERE出現在GROUP BY之前,並且出於某種原因......它只是沒有點擊我。我一整天都在看代碼......疲勞。 – RogueSpear00

回答

3

你是哪裏錯了地方:

SELECT Name, Count(*) As Total 
FROM Table 
WHERE Date = Today AND Type = 1 
GROUP BY Name 
2

您只需在FROM後移動您的WHERE即可。

SELECT Name, Count(*) As Total 
FROM Table 
WHERE [Date] = CAST(getdate() as Date) -- or 'Jan 1 1990' 
AND [Type] = 1 
GROUP BY Name 
+0

+1可能還需要施放Date字段(如果它是DateTime) – Magnus

2

其中組

SELECT Name, Count(*) As Total 
FROM Table 
WHERE Date >= @Today --assuming your date passed in has no time 
AND Date < DATEADD(d,1,@Today) 
AND Type = 1 
GROUP BY Name, Total 

例如之前談到您可以運行

SELECT LEFT(name,1) FROM sysobjects 
WHERE name < 'p' 
GROUP BY LEFT(name,1)