Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];

Вниз

Проблемы с запросом   Найти похожие ветки 

 
wer   (2002-04-19 10:14) [0]

"select sum(field2), sum(field3) from db where foeld1 >= field2 + field3". Проблема в следующем: если в бд есть незаполненные ячйки, то строки с ними не суммируются. "where field1 is not null and ..." не помогает. Что делать?


 
Johnmen   (2002-04-19 10:17) [1]

field2 is not null and
field3 is not null


 
wer   (2002-04-19 10:35) [2]

>"where field1 is not null and ..." не помогает - Значит:
пишу
where
field1 is not null and
field2 is not null and
field3 is not null
И всё-равно не работает! Работает только если заполнить пустые записи нулями


 
wer   (2002-04-19 11:55) [3]

ау, help!
select sum(field2), sum(field2) from db
where
field1 >= field1 + field2
and field1 is not null
and field2 is not null
and field3 is not null
Не работает!!!


 
Johnmen   (2002-04-19 12:05) [5]

Скорее всего функциональность is not null не поддерживается...


 
Val   (2002-04-19 12:11) [6]

поддерживается, просто операция сложения с null дает null и условие не выполняется


 
wer   (2002-04-19 12:22) [7]

Val, вы навеное правы, т. к.
is not null раньше работало.
Что делать сейчас?


 
roottim   (2002-04-19 12:24) [8]

а в фоксе нет что то типа nvl?
select sum(nvl(field2,0)), sum(nvl(field2,0)) from db
where
field1 >= field1 + field2;


 
Val   (2002-04-19 12:26) [9]

в смысле, что делать? ваш запрос отрабатывает правильно в соответствии с поставленным условием, сумирование идет по тем строкам где все поля заполнены. Вы что от него хотите?


 
Элизабет   (2002-04-19 12:28) [10]

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
Т.е. каждый конкретный случай выделить и потом все суммировать


 
wer   (2002-04-19 12:29) [11]

база - dbase 4

>select sum(nvl(field2,0)), sum(nvl(field2,0)) from db
>where
>field1 >= field1 + field2;
Пишет "Capability not supported" Наверное не знет что такое hvl


 
wer   (2002-04-19 12:31) [12]

>Val
Он считает правильно только если нет пустых ячеек


 
wer   (2002-04-19 12:32) [13]

>Val
Он считает правильно только если нет пустых ячеек

>Элизабет
1. Не подходит
2. Щас попробую



 
Элизабет   (2002-04-19 12:35) [14]

>Wer
Так у тебя же в запросе черным по белому написано: где поле1 НЕ ПУСТОЕ И поле2 НЕ ПУСТОЕ И поле3 НЕ ПУСТОЕ. Так что твой запрос работает правильно
Другое дело, что он не удовлетворяет твоим требованиям


 
Johnmen   (2002-04-19 13:44) [15]

>Элизабет © : Каким ?


 
VAleksey   (2002-04-19 13:44) [16]

Использую функцию CAST для преобразования полей в Numeric !


 
VAleksey   (2002-04-19 13:45) [17]

"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 будет считаться нулем


 
Johnmen   (2002-04-19 13:48) [18]

>VAleksey © : Ничего подобного !


 
Элизабет   (2002-04-19 13:51) [19]

>Johnmen
Ну тут уж это по-всякому расписано - чтобы в сумму входили и записи, в которых в одном или двух из 3-х полей нет числа (пустые поля).
А вышеуказанный запрос, как уже сказал Val, работает правильно


 
VAleksey   (2002-04-19 13:57) [20]


> Johnmen ©

Это еще почему это ?

Речь ведь идет о Local SQL как я понимаю ? Если так то именно как я сказал !


 
Johnmen   (2002-04-19 13:58) [21]

>Элизабет © : Не знаю, про какой из вышеуказаных запросов, речь, по запрос

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:58) [22]


> Johnmen ©

Это еще почему это ?

Речь ведь идет о Local SQL как я понимаю ? Если так то именно как я сказал !


 
Val   (2002-04-19 14:02) [23]

VAleksey © (19.04.02 13:58)
не сработает, можете проверить, что уж спорить
Johnmen © (19.04.02 13:58)
верен и отработает, только просуммирует он те строки, где все поля заполнены, а автору, похоже, нужно не это, а то что предложила Элизабет ©


 
Элизабет   (2002-04-19 14:07) [24]

>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)

запрос я и имела в виду.


 
VAleksey   (2002-04-19 14:18) [25]

Да е мое как не работает то
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");



 
VAleksey   (2002-04-19 14:22) [26]

файл 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.


 
wer   (2002-04-19 14:26) [27]

>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:31) [28]

Не знаю. Почему не работает ?
Условие не выполняется или возникает ошибка. Потому, что в 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.


 
Элизабет   (2002-04-19 14:34) [29]

> 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



 
wer   (2002-04-19 14:35) [30]

Если нет Where то он берёт нули а с where Cast(foeld1 as numeric) >= Cast(field2 as numeric) + Cast(field3 as numeric)
ничего не выдаёт - ещё раз говорю - сами проверьте
P. S. dm1.Query.SQL.Add.... - то же самое (тоже не работает)




 
Johnmen   (2002-04-19 14:40) [31]

>VAleksey © (19.04.02 14:31) : Заметь, ни слова не сказано про то, что если Null, то как ни кастуй, а все равно...получишь Null...


 
VAleksey   (2002-04-19 14:48) [32]

Перезагрузка не помогает ?
А то мной было замечено что:
- если запрос SQL выполняется с ошибкой или неправильно, то после исправления запроса, он начинает выполнятся правильно только после перезагрузки ALL BDE applications.


 
wer   (2002-04-19 14:49) [33]

>Элизабет
Действительно, получается что-то похожее. Но тогда появляются 2 проблемы:
1.Получается промежуточная таблица, из которой опять же надо с помощью
другого (правда простого) запроса получать данные
2.Столбцов на самом деле много - запрос получится здоровенный. Может даже
в нём будет больше максимального кол-ва символов.


 
VAleksey   (2002-04-19 14:53) [34]

> Johnmen © нет не нулл . Я так сделал по аналогии с
Table1Field.Value и Table1Field.AsFloat в 1-ом случае имеем нулл а во 2-ом 0.
У меня программа бы не работала без CAST.


 
VAleksey   (2002-04-19 14:56) [35]

> вышли на майл таблицу свою. Я с ней попробую, а то нет под рукой материала подходящего.


 
Lusha   (2002-04-19 15:09) [36]

>Элизабет

А зачем UNION? Почему не OR?

select sum(field2), sum(field3) from db
where
(field1 >= field2 + field3) OR
(field1 >= field2) OR
(field1 >= field3)



 
Johnmen   (2002-04-19 15:13) [37]

>VAleksey © : Обращаю еще раз твое внимание - Null значение поля в агрегатных ф-ях и Null значение поля в условиях выборки - это не одно и то же !

Прошу подтвердить, что с Null в условиях выборки (типа F1>F2) у тебя все работает ...


 
wer   (2002-04-19 15:22) [38]

> Johnmen © (19.04.02 15:13)
Что значит "с Null в условиях выборки (типа F1>F2) все работает" ?
Кого вы спрашиваете? Если меня, то вообще "is not null" раньше использовал и срабатывало.


 
VAleksey   (2002-04-19 15:25) [39]

wer вышли таблицу, с желательно описанием того что тебе нужно. Я проверю. Свой ответ сдесь же помещу.
Все блин меня выгоняют !ъ


 
wer   (2002-04-19 15:28) [40]

уже давно послал - наверное не дошла. Попробую ещё раз


 
Johnmen   (2002-04-19 16:37) [41]

>wer : Вопрос был к VAleksey © .
>wer :
>вообще "is not null" раньше использовал и срабатывало

тогда из-за чего же весь этот мутный флейм ?...


 
wer   (2002-04-19 16:48) [42]

>тогда из-за чего же весь этот мутный флейм ?...
:))
Раньше работал - не в этом запросе.
Да, похоже придётся создавать временные бд :(




 
Lusha   (2002-04-19 16:51) [43]

>wer (19.04.02 16:48)
Смотри Lusha © (19.04.02 15:09).


 
wer   (2002-04-19 17:13) [44]

>Смотри Lusha © (19.04.02 15:09).
похоже работает!
большое спасибо!!!!!!!


 
VAleksey   (2002-04-22 07:28) [45]

Прошу прощения за возврат к теме. Как не стыдно признаваться, но ! я действительно был не прав ((.

> Johnmen © (19.04.02 15:13)
> >VAleksey © : Обращаю еще раз твое внимание - Null значение
> поля в агрегатных ф-ях и Null значение поля в условиях выборки
> - это не одно и то же !

Совершенно правильное утверждение !



Страницы: 1 2 вся ветка

Форум: "Базы";
Текущий архив: 2002.05.16;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.54 MB
Время: 0.007 c
7-50149
Ahad
2002-02-14 16:58
2002.05.16
ISAPI


1-49975
Sender
2002-04-29 19:26
2002.05.16
Beep-ер


1-50035
AMQ
2002-05-01 16:04
2002.05.16
Парочка вопросов


1-50002
Alexey-neo
2002-04-30 18:15
2002.05.16
Как скрыть форму??


1-49935
KvORubinX
2002-04-29 08:59
2002.05.16
GIF GIF GIF GIF GIF GIF GIF формат





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский