#sql #sql-server #sql-server-2008 #windows-7
#sql #sql-server #sql-server-2008 #windows-7
Вопрос:
Мне нужно умножить все значения с плавающей запятой столбца в таблице, если значение столбца положительное. Если я нахожу, что значение равно нулю, отрицательному или не числовому значению, я вызываю ошибку в SQL server 2008 R2.
данная таблица t0:
col
1.5
2
данная таблица t1:
col
2
-1
5
0
null
NaN
Для t0 я должен получить 3, для t1 я должен вызвать ошибку.
DECLARE @ta float
SELECT CASE @float
when tableName.col <= 0 then raiseError
when tableName.factor IS NULL then raiseError
ELSE multiply(tableName.col)
END
FROM tableName
Я знаю, что могу использовать exp(sum(log(isnull()))) , но для вычислений с плавающей запятой это неэффективно. Существуют ли более эффективные способы сделать это?
Любая помощь будет оценена.
Комментарии:
1. Какой тип поля вы используете, поскольку вы можете хранить NaN?
2. @Joachim Isaksson10, поскольку таблица предоставлена другими, я предполагаю, что значение может быть перепутано. Мне нужно рассмотреть все угловые случаи.
Ответ №1:
DECLARE @Col DECIMAL(18,2),
@Result DECIMAL(18,2) = 1
DECLARE X CURSOR FOR
SELECT Col
FROM YourTable
OPEN X
FETCH NEXT FROM X INTO @Col
WHILE @@FETCH_STATUS=0 BEGIN
IF (@Col<=0)RAISERROR('Your Message',16,1)
IF (@Col IS NULL )RAISERROR('Your Message',16,1)
-- Your Condition
SET @Result = @Result*@Col
FETCH NEXT FROM X INTO @Col
END
CLOSE X
DEALLOCATE X
PRINT @Result