2014-12-16 2 views
1

Я пытаюсь реализовать геометрическое умножение с использованием SQL в Sybase. У меня процент от -100 до + бесконечности. Поскольку в Sybase нет агрегации продуктов, я использую аппроксимацию с помощью методов exp и log. Журнал не определен для log (0), поэтому мне нужно поймать значение -100.Условие внутри вызова функции в Sybase SQL

Я хотел бы сделать что-то похожее на это:

SELECT KEY, IF VALUE <= EXP(SUM(LOG(CASE WHEN VALUE <= -100 THEN 0 ELSE 1+VALUE/100 END))) 
FROM TABLE 
GROUP BY KEY 

часть запроса CASE WHEN VALUE <= -100 THEN 0 ELSE 1+VALUE/100 END действует вне функции, но не внутри функции журнала она появляется.

Сообщение об ошибке: Неправильный синтаксис рядом с ключевым словом FROM.

Любая идея, как исправить это?

+1

Вы говорите, что log (0) не определен, а затем попытайтесь вычислить его, когда VALUE <= -100'. Это намеренно? – Andy

+1

fwiw: похоже, вы выбираете два значения - KEY, за которым следует искаженный/неполный оператор if. У меня нет доступа к серверу Sybase (это IQ или ASE, который вы используете btw?) Для тестирования, но если CASE не работает внутри LOG(), инвертируйте логику и поместите отдельные LOG() s внутри двух ветвей случай. –

+0

Если вы пытаетесь присвоить значение VALUE <= -100', то вы должны сделать оператор 'CASE' return 1, потому что' log (1) = 0' – Andy

ответ

1

Я должен был выпить кофе перед этим ... Спасибо за помощь.

  1. IF VALUE <= не должно быть вообще. Это происходит из старого теста, который я сделал, и забыл его удалить.
  2. LOG() находится не в том месте.

Вот правильный ответ:

SELECT KEY, EXP(SUM(CASE WHEN VALUE <= -100 THEN 0 ELSE LOG(1+VALUE/100) END)) 
FROM TABLE 
GROUP BY KEY 

EDIT: На самом деле, так как стоимость была в процентах, это могло бы быть больше логики, чтобы получить конечный результат также в процентах:

SELECT KEY, (EXP(SUM(CASE WHEN VALUE <= -100 THEN 0 ELSE LOG(1+VALUE/100) END)) - 1) * 100 
FROM TABLE 
GROUP BY KEY 
+0

Это имеет смысл! Мне было интересно, как получить boolean будет помочь, но предположил, что вопрос был для предшественника самой функции. – Andy

Смежные вопросы