我在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'的索引条目。
答案 0 :(得分: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记录分组。
答案 1 :(得分: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'
答案 2 :(得分:0)
感谢大家试图帮助我。 在尝试更新行失败后,我做了索引重建,用ltrim(rtrim())更新了col1,现在它产生了正确的结果。