![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблемы с запросом [D5, dBase, FoxPro]
wer © (2002-04-19 10:14:00)"select sum(field2), sum(field3) from db where foeld1 >= field2 + field3". Проблема в следующем: если в бд есть незаполненные ячйки, то строки с ними не суммируются. "where field1 is not null and ..." не помогает. Что делать?
VAleksey (2002-04-22 07:28:00) [1]Прошу прощения за возврат к теме. Как не стыдно признаваться, но ! я действительно был не прав ((.
> Johnmen © (19.04.02 15:13)
> >VAleksey © : Обращаю еще раз твое внимание - Null значение
> поля в агрегатных ф-ях и Null значение поля в условиях выборки
> - это не одно и то же !
Совершенно правильное утверждение !
wer (2002-04-19 17:13:00) [2]>Смотри Lusha © (19.04.02 15:09).
похоже работает!
большое спасибо!!!!!!!
Lusha (2002-04-19 16:51:00) [3]>wer (19.04.02 16:48)
Смотри Lusha © (19.04.02 15:09).
wer (2002-04-19 16:48:00) [4]>тогда из-за чего же весь этот мутный флейм ?...
:))
Раньше работал - не в этом запросе.
Да, похоже придётся создавать временные бд :(
Johnmen (2002-04-19 16:37:00) [5]>wer : Вопрос был к VAleksey © .
>wer :
>вообще "is not null" раньше использовал и срабатывало
тогда из-за чего же весь этот мутный флейм ?...
wer (2002-04-19 15:28:00) [6]уже давно послал - наверное не дошла. Попробую ещё раз
VAleksey (2002-04-19 15:25:00) [7]wer вышли таблицу, с желательно описанием того что тебе нужно. Я проверю. Свой ответ сдесь же помещу.
Все блин меня выгоняют !ъ
wer (2002-04-19 15:22:00) [8]> Johnmen © (19.04.02 15:13)
Что значит "с Null в условиях выборки (типа F1>F2) все работает" ?
Кого вы спрашиваете? Если меня, то вообще "is not null" раньше использовал и срабатывало.
Johnmen (2002-04-19 15:13:00) [9]>VAleksey © : Обращаю еще раз твое внимание - Null значение поля в агрегатных ф-ях и Null значение поля в условиях выборки - это не одно и то же !
Прошу подтвердить, что с Null в условиях выборки (типа F1>F2) у тебя все работает ...
Lusha (2002-04-19 15:09:00) [10]>Элизабет
А зачем UNION? Почему не OR?
select sum(field2), sum(field3) from db
where
(field1 >= field2 + field3) OR
(field1 >= field2) OR
(field1 >= field3)
VAleksey (2002-04-19 14:56:00) [11]> вышли на майл таблицу свою. Я с ней попробую, а то нет под рукой материала подходящего.
VAleksey (2002-04-19 14:53:00) [12]> Johnmen © нет не нулл . Я так сделал по аналогии с
Table1Field.Value и Table1Field.AsFloat в 1-ом случае имеем нулл а во 2-ом 0.
У меня программа бы не работала без CAST.
wer (2002-04-19 14:49:00) [13]>Элизабет
Действительно, получается что-то похожее. Но тогда появляются 2 проблемы:
1.Получается промежуточная таблица, из которой опять же надо с помощью
другого (правда простого) запроса получать данные
2.Столбцов на самом деле много - запрос получится здоровенный. Может даже
в нём будет больше максимального кол-ва символов.
VAleksey (2002-04-19 14:48:00) [14]Перезагрузка не помогает ?
А то мной было замечено что:
- если запрос SQL выполняется с ошибкой или неправильно, то после исправления запроса, он начинает выполнятся правильно только после перезагрузки ALL BDE applications.
Johnmen (2002-04-19 14:40:00) [15]>VAleksey © (19.04.02 14:31) : Заметь, ни слова не сказано про то, что если Null, то как ни кастуй, а все равно...получишь Null...
wer (2002-04-19 14:35:00) [16]Если нет Where то он берёт нули а с where Cast(foeld1 as numeric) >= Cast(field2 as numeric) + Cast(field3 as numeric)
ничего не выдаёт - ещё раз говорю - сами проверьте
P. S. dm1.Query.SQL.Add.... - то же самое (тоже не работает)
Элизабет (2002-04-19 14:34:00) [17]> Wer
select sum(field2), sum(field3) from db
// случай, когда все 3 поля ненулевые
where
field1 >= field2 + field3
and field1 is not null
and field2 is not null
and field3 is not null
union
select sum(field2), sum(field3) from db
where
field1 >= field2 // т.к. поле 3 пустое, то его можно не учитывать
and field1 is not null
and field2 is not null
and field3 is null // поле 3 - пустое!
union
select sum(field2), sum(field3) from db
where
field1 >= field3
and field1 is not null
and field2 is null
and field3 is not null
VAleksey (2002-04-19 14:31:00) [18]Не знаю. Почему не работает ?
Условие не выполняется или возникает ошибка. Потому, что в Local SQL написано :
Use CAST to convert the value in the specified column to the data type specified. CAST can also be applied to literal and calculated values. CAST can be used in the columns list of a SELECT statement, in the predicate for a WHERE clause, or to modify the update atom of an UPDATE statement.
wer (2002-04-19 14:26:00) [19]>VAleksey
Если писать
select
sum(Cast(field2 as numeric)),
sum(Cast(field3 as numeric))
from db
то, действительно, Null будет считаться нулем. Но
select
sum(Cast(field2 as numeric),
sum(Cast(field3 as numeric))
from db
where Cast(foeld1 as numeric) >= Cast(field2 as numeric) + Cast(field3 as numeric)
не работает! Попробуйте
>Элизабет - пункт 2
Или я чего-то не понял или вы предлагаете не то
Нужна же ведь проверка field1 >= field2 + field3
Если писать (field1 >= field2) + (field1 >= field3)
как я понял то получится совсем не то.
Щас попробую dm1.Query.SQL.Add....
VAleksey (2002-04-19 14:22:00) [20]файл LOcal SQL:
Column values of zero are included in the aggregation. NULL column values are not counted in the calculation. If the number of qualifying rows is zero, SUM returns a NULL value.