Конференция "Базы" » Select Count работает неверно! Почему?
 
  • sdfdss (07.08.13 20:13) [0]
    Здравствуйте, есть БД и delphi. Соединение через ADO  c access.

    В таблице "Or" есть поле "IIF" в котором содержится или значение "Yes" или ничего! Т.е. может быть Yes, пустота или NULL. Мне необходимо посчитать количество записей в которых Yes!
    Я зашел в Access  и вижу, что поле IIF пустое полностью (не знаю NULL ТАМ ИЛИ ПУСТОТА)!!! Т.е. в нем нигде нет "Yes". Всего в таблице 20 записей (показывает Access). Но когда я пишу в Delphi запрос:

    frmmain.ADOQuery1.SQL.Add('SELECT COUNT(Код) FROM Or where (IIF<>'+Chr(39)+'Yes'+chr(39)+')');
    То на выходе получаю всего 1 запись!!!

    Если пишу так:
    frmmain.ADOQuery1.SQL.Add('SELECT COUNT(Код) FROM Or where (IIF<>'+Chr(39)+'Yes'+chr(39)+' or ifdel is Null)')
    То получаю 19 записей!!! 1 пропадает!

    Если пишу так:
    SELECT COUNT(Код) FROM Or where (iIf is NULL or iIf='+Chr(39)+chr(39)+')');
    Получаю 18 записей!!! 2 пропадает!

    ЧТО ЖЕ не так!!!
    Подскажите, пожалуйста, правильный запрос!
  • sdfdss (07.08.13 20:16) [1]
    У меня таблица не or называется а ORDER123 :)))
  • Обычный Порошок (07.08.13 20:31) [2]
    count(*)
  • sdfdss (07.08.13 20:42) [3]
    А запрос то какой использовать?
  • Обычный Порошок (07.08.13 20:43) [4]
    Select Count работает неверно! Почему?

    селект каунт всегда работает верно.
  • sdfdss (07.08.13 20:53) [5]
    Вы не поняли! :)
    Я спрашивал, какой из трех вариантов Select Count  (приведены в первом посте) писать в результате?
  • Обычный Порошок (07.08.13 20:56) [6]
    никакой.

    Получаю 18 записей!!! 2 пропадает!

    каунт(поле) - не считает записи. он считает значения.
  • sdfdss (07.08.13 21:14) [7]
    Честно говоря не понятно...

    1. Ставлю в Count *:
    SELECT COUNT(*) FROM Order123 where (iIf is NULL or ifdel='+Chr(39)+chr(39)+')'
    Получаю те же 22 записи! 1 пропадает.
    Да и потом, если Count считает значения, то чем ему не нравиться поле "Код" (которое счетчик) где значения есть всегда!

    2. Прошерстил Инет, везде пишут:
    "Другой пример. Допустим, надо узнать просто количество записей. Тогда то же самое, но без WHERE:
    SELECT COUNT(*) FROM `table`"
    т.е. все как у меня

    3. Пишу аналогичный SQL запрос на выборку записей:
    'Select * from Order123 where (iIf is NULL or iIf ='+Chr(39)+chr(39)+') order by КОД'

    Точно также дает всего 22 записи!!!
    ПОЧЕМУ???
  • Обычный Порошок (07.08.13 21:16) [8]
    потому что в выборку попало столько, сколько вернул твой count(*) .... where
    неужели и это непонятно?
  • Обычный Порошок (07.08.13 21:24) [9]
    where (iIf is NULL

    а это что за фигня?
    это поле или это обращение к функции IIF?

    таблица по имени OR, поле по имени IIF .....
    а не дофига ли здесь ребусов для движка?
  • sdfdss (07.08.13 21:53) [10]
    у меня названия полей и таблицы нормальные (несистемные). решил их упростить чтобы вам пгнятно было нои получилась ерунда.... приношу извиненния.
    и то что select возвращает то же что и count я вижу. Вопрос в том как сделать так чтобы возвоащалось все записи - без потерянных
  • sdfdss (07.08.13 21:54) [11]
    у меня названия полей и таблицы нормальные (несистемные). решил их упростить чтобы вам пгнятно было нои получилась ерунда.... приношу извиненния.
    и то что select возвращает то же что и count я вижу. Вопрос в том как сделать так чтобы возвоащалось все записи - без потерянных
  • Обычный Порошок (07.08.13 21:59) [12]
    и то что select возвращает то же что и count я вижу.

    Какие тогда претензии к каунту?
    Читаем книжки по sql и учимся формулировать where

    Вопрос в том как сделать так чтобы возвоащалось все записи - без потерянных

    А что, разве непонятно, что вся проблема в содержимом полей которые во where?

    и содержимое таково, что 2 записи в твой where не попадают.

    а то каунт, шмаунт, парамаунт.....
  • sdfdss (07.08.13 22:38) [13]
    Буду пытаться разбираться!
    Спасибо!
 
Конференция "Базы" » Select Count работает неверно! Почему?
Есть новые Нет новых   [134430   +2][b:0][p:0]