2016-07-01 56 views
0

你好的幫助,請迷茫......計數不服從where子句

我有這個查詢假設拔出了I型列只計數,但是當我運行它,它翻出整個計數數據庫和犯規服從where子句規則...

SELECT [type], typei, vtdate, count (typei) as count 
FROM vtindex 
where typei is not null or typei <> '#' 
and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY 
[type], Typei, vtdate 
HAVING 
COUNT(typei) > 1 

的想法是,用戶將在日期垃圾郵件,並讓他們I型的計數特定日期垃圾

感謝...

+2

不知道你的數據是什麼樣的(即編輯你的問題,包括一些示例數據)和預期結果(即編輯你的問題並添加這個問題),我們不太可能修復查詢。 –

+1

我認爲你必須從你的select子句中刪除'typei'列,並且只選擇'[type],vtdate,count(typei)'。並從group-by子句中刪除它。 – irene

+0

@damien_The_Unbeliever你不需要數據修復查詢下面看到他們已經開始修復查詢,其中一個已經是正確的,但感謝您的輸入.... – Troz

回答

1

試試這個:

SELECT [type], typei, count (typei) as count 
FROM vtindex 
where typei is not null or typei <> '#' 
and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY 
[type], Typei 
HAVING 
COUNT(typei) > 1 

思想是通過它來除去其他領域比I型和組。

祝你好運!

+0

這是工作只是不排除'#'由於某種原因 – Troz

+0

我認爲,你應該與條件:嘗試把括號在這裏:其中(typei不是null或typei <>'#')和... –

2

在GROUP BY - 子句中,只能有你想要分組的列,而不是你想要計算或求和的列。因此,與嘗試:

SELECT [type], vtdate, count(typei) as count 
FROM vtindex 
WHERE typei IS NOT NULL OR typei <> '#' 
    and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY [type], vtdate 
HAVING count(typei) > 1 
+0

soz沒有工作,拉動整個db – Troz

2

添加括號以正確過濾記錄。

目前你的where子句在下列順序

Where typei IS NOT NULL OR (typei <> '#' 
    and vtdate between '2016/06/01' and '2016/06/30') 

得到證實,但你需要這個

Where (typei IS NOT NULL OR typei <> '#') 
    and vtdate between '2016/06/01' and '2016/06/30' 
+0

這有助於抱歉愚蠢我沒有想到括括我通常做的where子句,廣告這部分幫助我解決了這個問題,所以謝謝... – Troz

0

我想應該是這樣的;)

SELECT [type], typei, vtdate, count (typei) as count 
FROM vtindex 
where (typei is not null or typei <> '#') 
and vtdate between '2016/06/01' and '2016/06/30' 
GROUP BY 
[type], Typei, vtdate 
HAVING 
COUNT(typei) > 1 

沒有這個括弧,當typei不爲空時,其他條件將不被計算。

+0

這將工作的另一個報告謝謝,但也包括'#'出於某種原因 – Troz