Комбинированное условие != сумме строк отдельных запросов?

Browny

Всех приветствую!Столкнулся со странным поведением MS-SQL 2005.Есть таблица, в ней помимо прочих - 2 varchar столбца.Выполняю запрос [1]:
Select COUNT(*) from REPORT901_Cache_1K2009 where
 ((SUITITEM_NUM='1.1') and (SUITITEM_NAME='Значение1'))
or ((SUITITEM_NUM='1.2') and (SUITITEM_NAME='Значение2'))
... много-много or ......
or ((SUITITEM_NUM='n.m') and (SUITITEM_NAME='ЗначениеN'))
Получаю 25969.Выполняю запросЫ [2]:
Select COUNT(*) from REPORT901_Cache_1K2009 where (SUITITEM_NUM='1.1') and (SUITITEM_NAME='Значение1')
Select COUNT(*) from REPORT901_Cache_1K2009 where (SUITITEM_NUM='1.2') and (SUITITEM_NAME='Значение2')
......
Select COUNT(*) from REPORT901_Cache_1K2009 where (SUITITEM_NUM='n.m') and (SUITITEM_NAME='ЗначениеN')
Суммирую.Получаю 25971В чём может быть причина?
10 ответов

Browny

Выполняю запросЫ [2]:
Select COUNT(*) from REPORT901_Cache_1K2009 where (SUITITEM_NUM='1.1') and (SUITITEM_NAME='Значение1')
Select COUNT(*) from REPORT901_Cache_1K2009 where (SUITITEM_NUM='1.2') and (SUITITEM_NAME='Значение2')
......
Select COUNT(*) from REPORT901_Cache_1K2009 where (SUITITEM_NUM='n.m') and (SUITITEM_NAME='ЗначениеN')
Суммирую.Получаю 25971В чём может быть причина?
Что суммируете то?


Browny

Может быть так, что неэдентичные запросы - в одном случае count(*), в другом count(поле) при наличии поля со значением null?к примеру
--вставляем 5 записей две из которых содержат null значения поля 
declare 
@t table (id int )
insert into @t select <b>1</b> union all select <b>1</b> union all select <b>2</b> 
			 union all select null union all select null
select count(*) as cntAll,count(id) as cntId 
from @t
cntAll cntId
----------- -----------
<b>5</b> <b>3</b>
Warning: Null value is eliminated by an aggregate or other SET operation.


Browny

_djХомяГ,суммирую результаты функции COUNT()


Browny

rsolanov,суммирую результаты функции COUNT()Пардон, предыдущее сообщение - прошу удалить, промахнулся ссылкой..


Browny

Browny,наверняка, упростили что-нибудь перед тем, как сюда постить? Ошибки копипастинга точно нет никакой?Может, индекс битый какой-нибудь?За время между двумя запросами никто вставить две строчки не мог?


Browny

попробуйте конкретную пару условий найти, где расхождение наблюдается.возможно, они, все-таки, пересекаются.


Browny

Собственно, сделал скрипт, формирующий таблицу и заполняющий её.И приложил 2 запроса, которые выводят разные результаты.http://brokenplate.narod.ru/arch/ReportCache.rarЕдинственное, что поменял в таблице - убрал незначащие столбцы (разумеется, проверил, что проблема осталась после удаления этих столбцов).


Browny

Select SUITITEM_NUM, SUITITEM_NAME, COUNT(*) from REPORT901_Cache_1K2009 group by SUITITEM_NUM, SUITITEM_NAMEorder by SUITITEM_NUM, SUITITEM_NAME


Browny

Browny,Эта строчка два раза
((SUITITEM_NUM='14.8') and (SUITITEM_NAME='Изменение порядка исполнения исполнительного листа'))


Browny

Два раза, спасибо! Собственно, сейчас частями тестировал запрос, нашёл, вслед за этим Ваш ответ.Увы, считал, что выборка параметров давала уникальные пары значений. Glory, тему считаю закрытой и прошу удалить за ненадобностью.