![]() |
| ||
|
|
Новости |
Поиск |
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-19 14:18:00) [21]Да е мое как не работает то
1) конструкцию использую для получения свода по ЕСН
SELECT
Sum(Cast(Z.Fond1 as numeric)) As Fond1,
Sum(Cast(Z.Fond11 as numeric)) As Fond11,
Sum(Cast(Z.Fond12 as numeric)) As Fond12,
Sum(Cast(Z.Fond2 as numeric)) As Fond2,
Sum(Cast(Z.Fond3 as numeric)) As Fond3,
Sum(Cast(Z.Fond4 as numeric)) As Fond4,
"*" As Group1
FROM "Z_Staff.db" Z
2)а вот посложнее но суть та же самая. Без CAST будут выпадать строки со значениями NULL
dm1.Query.SQL.Add("SELECT Sum(ZS.Old_Rest) AS SaldoBeg,");
dm1.Query.SQL.Add(" Sum(Cast(ZS.Sum_Pay as numeric) +Cast(ZS.Sum_Rest as numeric)) AS SaldoEnd");
dm1.Query.SQL.Add("FROM "Z_Staff.DB" ZS");
Элизабет (2002-04-19 14:07:00) [22]>Johnmen ©
Именно этот:
select sum(field2), sum(field3) from db
where
(field1 is not null) and
(field2 is not null) and
(field3 is not null) and
(field1 >= field2 + field3)
запрос я и имела в виду.
Val (2002-04-19 14:02:00) [23]VAleksey © (19.04.02 13:58)
не сработает, можете проверить, что уж спорить
Johnmen © (19.04.02 13:58)
верен и отработает, только просуммирует он те строки, где все поля заполнены, а автору, похоже, нужно не это, а то что предложила Элизабет ©
VAleksey (2002-04-19 13:58:00) [24]
> Johnmen ©
Это еще почему это ?
Речь ведь идет о Local SQL как я понимаю ? Если так то именно как я сказал !
Johnmen (2002-04-19 13:58:00) [25]>Элизабет © : Не знаю, про какой из вышеуказаных запросов, речь, по запрос
select sum(field2), sum(field3) from db
where
(field1 is not null) and
(field2 is not null) and
(field3 is not null) and
(field1 >= field2 + field3)
абсолютно верен ! И обязан отрабатывать !
VAleksey (2002-04-19 13:57:00) [26]
> Johnmen ©
Это еще почему это ?
Речь ведь идет о Local SQL как я понимаю ? Если так то именно как я сказал !
Элизабет (2002-04-19 13:51:00) [27]>Johnmen
Ну тут уж это по-всякому расписано - чтобы в сумму входили и записи, в которых в одном или двух из 3-х полей нет числа (пустые поля).
А вышеуказанный запрос, как уже сказал Val, работает правильно
Johnmen (2002-04-19 13:48:00) [28]>VAleksey © : Ничего подобного !
VAleksey (2002-04-19 13:45:00) [29]"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)"
тогда
Null будет считаться нулем
VAleksey (2002-04-19 13:44:00) [30]Использую функцию CASTдля преобразования полей в Numeric !
Johnmen (2002-04-19 13:44:00) [31]>Элизабет © : Каким ?
Элизабет (2002-04-19 12:35:00) [32]>Wer
Так у тебя же в запросе черным по белому написано: где поле1 НЕ ПУСТОЕ И поле2 НЕ ПУСТОЕ И поле3 НЕ ПУСТОЕ. Так что твой запрос работает правильно
Другое дело, что он не удовлетворяет твоим требованиям
wer (2002-04-19 12:32:00) [33]>Val
Он считает правильно только если нет пустых ячеек
>Элизабет
1. Не подходит
2. Щас попробую
wer (2002-04-19 12:31:00) [34]>Val
Он считает правильно только если нет пустых ячеек
wer (2002-04-19 12:29:00) [35]база - dbase 4
>select sum(nvl(field2,0)), sum(nvl(field2,0)) from db
>where
>field1 >= field1 + field2;
Пишет "Capability not supported" Наверное не знет что такое hvl
Элизабет (2002-04-19 12:28:00) [36]1. Заполнить по умолчанию пустоты нулями
2. Или попробовать использовать что-то типа
select sum(field2), sum(field3) from db
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
and field1 is not null
and field2 is not null
and field3 is null
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
Т.е. каждый конкретный случай выделить и потом все суммировать
Val (2002-04-19 12:26:00) [37]в смысле, что делать? ваш запрос отрабатывает правильно в соответствии с поставленным условием, сумирование идет по тем строкам где все поля заполнены. Вы что от него хотите?
roottim (2002-04-19 12:24:00) [38]а в фоксе нет что то типа nvl?
select sum(nvl(field2,0)), sum(nvl(field2,0)) from db
where
field1 >= field1 + field2;
wer (2002-04-19 12:22:00) [39]Val, вы навеное правы, т. к.
is not null раньше работало.
Что делать сейчас?
Val (2002-04-19 12:11:00) [40]поддерживается, просто операция сложения с null дает null и условие не выполняется