2013-01-18 44 views
0

我在Sql Server 2000中有一箇舊的數據庫,我仍然需要維護它。 我有兩個疑問:不同的行數

SELECT col1, 
     COUNT(*) 
FROM someTable 
WHERE YEAR = 2012 
     AND c_id = 1 
     AND p_id = 4 
GROUP BY 
     col1 


SELECT COUNT(*) 
FROM someTable 
WHERE YEAR = 2012 
     AND c_id = 1 
     AND p_id = 4 
     AND col1 = '11111' 

當我找到第一個查詢此相同的值「11111」這顯示了3個多行則在第二個查詢。這怎麼可能?這個kol1的值只有問題。 它也產生不同的總和。

有沒有數據庫損壞或類似的東西可能會產生這個問題的機會?

我試過此更新:

update sometable 
set col1=ltrim(rtrim(col1)) 
where c_id=1 
and p_id=4 
and year=2012 

它拋出這個錯誤:

中找不到索引頁(1:76450)的RID '16140001100032303132811300400' 的索引條目,索引ID 2,數據庫'xxx'。

+0

你能提供查詢輸出嗎?這並不完全清楚你在問什麼。第二個查詢將始終生成單行。第一個查詢中的count(*)在第二個查詢中返回的行數爲col1 ='11111',count爲(*)'給出不同的數字? – Cozzamara

+0

輸出如下所示: 00001 | 25 00002 | 11 ... 11111 | 530 對於第二個查詢結果是527 – Marka

+0

@ user1659786腐敗並不是真的可能,數據本身會有一些不同意見 – twoleggedhorse

回答

0

感謝大家試圖幫助我。 嘗試更新行失敗後,我做了索引重建,更新col1與ltrim(rtrim()),現在它產生正確的結果。

0

在第一種情況下,您是按col1分組,第二種情況是指定要過濾的確切值。在col1中的一些值之後可能會有空格。例如...

'11111' 
'11111 ' 
'11111 ' 

...將在GROUP BY中爲您提供3行,但只有第一個將在您的第二個查詢中返回結果。嘗試使用RTRIM()函數

SELECT RTRIM(col1) AS col1, 
     COUNT(*) 
FROM someTable 
WHERE YEAR = 2012 
     AND c_id = 1 
     AND p_id = 4 
GROUP BY 
     RTRIM(col1) 


SELECT COUNT(*) 
FROM someTable 
WHERE YEAR = 2012 
     AND c_id = 1 
     AND p_id = 4 
     AND RTRIM(col1) = '11111' 
+0

即使使用ltrim(rtrim(col1))進行分組時,也會得到不同的結果。 – Marka

+0

@ user1659786您是否使用第二個查詢嘗試了RTRIM()? – twoleggedhorse

+0

是的,它仍然是一樣的。 – Marka

1

也許你的表有4行,對應的字段有相同的值。我認爲像

col1 | year | c_id | p_id | any_field 
11111| 2012 | 1 | 4 | value_1 
11111| 2012 | 1 | 4 | value_2 
11111| 2012 | 1 | 4 | value_3 
11111| 2012 | 1 | 4 | value_4 

但是,沒有選擇any_field,你會看到,因爲其他重複場的唯一一家通過col1中記錄分組。

+0

但是count(*)應該顯示4,而不是5或6 ... – Marka

+0

不,count(*)必須在SELECT子句中沒有「any_field」的情況下顯示1。您的分組查詢必須比另一個短。不是嗎? –

+0

計數(*)應爲col1顯示值爲'11111'的4。 它顯示一行,但計數(*)的值是4. – Marka