不同的行数

时间:2013-01-18 06:55:33

标签: sql sql-server sql-server-2000

我在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'的索引条目。

3 个答案:

答案 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,现在它产生了正确的结果。