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)、索引 ID 2、数据库“xxx”中找不到 RID“16140001100032303132811300400”的索引条目。

4

3 回答 3

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 分组的记录。

于 2013-01-18T07:06:27.533 回答
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'
于 2013-01-18T07:01:51.577 回答
0

感谢大家试图帮助我。在尝试更新行失败后,我进行了索引重建,用 ltrim(rtrim()) 更新了 col1,现在它产生了正确的结果。

于 2013-01-18T08:04:12.870 回答