умножьте все значения с плавающей запятой столбца в таблице, если значение равно нулю, отрицательному или не числовому значению, вызовет ошибку в SQL server 2008 R2

#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