|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
У меня в программе надо считать произведение 3-х столбцов при условии что элемент не ноль (например если 2 0 3 то произведение будет 6). Можно ли это как-либо написать sql-запросом? Просто иначе выпоолняется все очень долго. Подскажите пожалуйста! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 14:52 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
Select (Iif(fld1=0,1,fld1)*Iif(fld2=0,1,fld2)*Iif(fld3=0,1,fld3)) as some_name From.... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 14:56 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
Спасибо большое. Получилось!!!!!! ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 15:07 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
А если все столбцы = 0 ? Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 15:58 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
В версии VFP8 введена функция EVL(), которая возвращает первое значение отличное от EMPTY(). Для числовых значений 0 и есть пустое значение. Т.е. выражение можно записать короче Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 16:52 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 17:12 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
гость... Код: plaintext
Это не сработает, если поля могут принимать отрицательные значения. В общем случае, выражение от набора полей не поможет определить пустоту каждого поля в отдельности. В принципе, можно написать так Код: plaintext
или так Код: plaintext
Насколько понимаю, вариант, когда два поля из трех пустые, специально рассматривать не имеет смысла. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 17:40 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
Это точно работает: select nvl(fld1,100) as F1, nvl(fld2,5) as F2, nvl(fld1,12) as F3 from DUAL into table AAA ... |
|||
:
Нравится:
Не нравится:
|
|||
29.10.2008, 20:51 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
FAMЭто точно работает: select nvl(fld1,100) as F1, nvl(fld2,5) as F2, nvl(fld1,12) as F3 from DUAL into table AAA Вы путаете понятия "пустое значение" и значение NULL. Это "две большие разницы". NULL - это не известное значение. В данном случае, неизвестно равно оно нулю или нет. Пустое - это вполне определенное значение. В данном случае, как раз и равное нулю. NVL() - проверка на значение NULL EVL() - проверка на пустое значение. Для чисел, проверка на значение 0. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2008, 00:39 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
nastasjalУ меня в программе надо считать произведение 3-х столбцов при условии что элемент не ноль (например если 2 0 3 то произведение будет 6). Можно ли это как-либо написать sql-запросом? Просто иначе выпоолняется все очень долго. Подскажите пожалуйста! Код: plaintext 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2008, 14:18 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
beginner_foxxnastasjalУ меня в программе надо считать произведение 3-х столбцов при условии что элемент не ноль (например если 2 0 3 то произведение будет 6). Можно ли это как-либо написать sql-запросом? Просто иначе выпоолняется все очень долго. Подскажите пожалуйста! Код: plaintext 1. 2.
Не то, чтобы данный код был совсем уж бессмысленным, но он, во-первых, избыточный, а, во-вторых, не решает поставленную задачу. Условие where a<>0 and b<>0 and c<>0 означает, что ВСЕ поля одновременно отличны от 0. Нет смысла сравнивать значения с нулем, если все нулевые значения уже отсечены. Возможно, здесь предполагалось OR вместо AND? Т.е. надо бы писать where a<>0 or b<>0 or c<>0 Тогда смысл появляется. Это условие отсекает только те записи, у которых все поля равны нулю. Однако из постановки задачи не ясно, а надо ли их отсекать? Или оставить, но установить значение выражения равным 0? А насчет избыточности... icase() все-таки предполагает наличие нескольких последовательных условий. Если надо проверить всего-лишь одно, то почему недостаточно iif()? А если проверка на пустое значение, то почему не использовать EVL()? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2008, 14:55 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
Можно я тоже свой изврат предложу: Код: plaintext
PS Автор топика похоже давно проблему порешал и другими занимается. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2008, 15:13 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
ВладимирМbeginner_foxx[quot nastasjal]У меня в программе надо считать произведение 3-х столбцов при условии что элемент не ноль (например если 2 0 3 то произведение будет 6). Можно ли это как-либо написать sql-запросом? Просто иначе выпоолняется все очень долго. Подскажите пожалуйста! Код: plaintext 1. 2.
авторНе то, чтобы данный код был совсем уж бессмысленным, но он, во-первых, избыточный, а, во-вторых, не решает поставленную задачу. Не соглашусь :-)) nastasjal У меня в программе надо считать произведение 3-х столбцов при условии что элемент не ноль Код: plaintext 1. 2.
Код: plaintext 1. 2.
авторicase() все-таки предполагает наличие нескольких последовательных условий. Если надо проверить всего-лишь одно, то почему недостаточно iif()? А если проверка на пустое значение, то почему не использовать EVL()? icase ближе к стандарту спецификации SQL case-конструкции , но как говориться на вкус и цвет товарищей нет ... |
|||
:
Нравится:
Не нравится:
|
|||
30.10.2008, 17:34 |
|
Произведение ненулевых столбцов
|
|||
---|---|---|---|
#18+
ВладимирМ Условие where a<>0 and b<>0 and c<>0 означает, что ВСЕ поля одновременно отличны от 0. Нет смысла сравнивать значения с нулем, если все нулевые значения уже отсечены. Возможно, здесь предполагалось OR вместо AND? Т.е. надо бы писать where a<>0 or b<>0 or c<>0 Тогда смысл появляется. Это условие отсекает только те записи, у которых все поля равны нулю. Однако из постановки задачи не ясно, а надо ли их отсекать? Или оставить, но установить значение выражения равным 0? Да, Вы правы. Я хотел отсечь записи, у которых все поля равны нулю, надо писать именно так where a<>0 or b<>0 or c<>0 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2008, 09:35 |
|
|
start [/forum/topic.php?fid=41&msg=35623111&tid=1587126]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
60ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
others: | 13ms |
total: | 164ms |
0 / 0 |