Sql 不同的行数

Sql 不同的行数,sql,sql-server,sql-server-2000,Sql,Sql Server,Sql Server 2000,我在SQLServer2000中有一个旧数据库,我仍然需要维护它。 我有两个疑问: 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 A

我在SQLServer2000中有一个旧数据库,我仍然需要维护它。 我有两个疑问:

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”的索引项。

在第一个实例中,您是按col1分组的,在第二个实例中,您指定了要按其进行筛选的精确值。在col1中的某些值之后可能有尾随空格。例如

'11111'
'11111 '
'11111  '
…将在分组中为您提供3行,但只有第一行将在第二个查询中返回结果。尝试使用RTRIM()函数


可能您的表中有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

但是,没有选择任何_字段,您将只看到一个按col1分组的记录,因为其他字段重复。

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

您能提供查询输出吗?你问什么还不完全清楚。第二个查询将始终生成单行<第一次查询中的code>COLL(*)对带有
col1='11111'
的行返回3,第二次查询中的
count(*)
给出不同的数字?输出如下所示:00001 | 25 00002 | 11。。。11111 | 530,第二个查询结果为527@user1659786损坏的可能性不大,数据会出现异常。所有列的数据类型是什么?可能只是为表发布整个DDL。col1是varchar(20),其他的并不重要。即使使用ltrim(rtrim(col1))分组,也会有不同的结果。从第二个查询中删除COUNT()时返回多少行?@user1659786您为我们简化了示例吗?你真的加入了另一张桌子吗?不,没有加入。正如您所看到的,我只重命名了表名和列名。否,count(*)必须显示1,而在SELECT子句中不显示“any_field”。分组查询必须比另一个查询短。不是吗?Count()应该为值为“11111”的col1显示4。它显示一行,但count()的值是4。对不起,您是对的。是这样吗?1行和计数(*)=4或类似的结果,具体取决于您的表行…?类似的情况。分组时,col1='11111'显示530。当按col1='11111'过滤时,它显示527。哎呀,我正期待着相反的结果。试试这个:
从一些表中选择COUNT(*),其中YEAR=2012,c_id=1,p_id=4,col1,比如“11111%”
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