SQL Внедрить, если заявление не принимать еще - PullRequest
0 голосов
/ 20 апреля 2020

При выполнении следующего оператора я получаю сообщение об ошибке с оператором if в SQL Server 2014:

if MAX(A,OS) <> 0 

MAX(A.OS) + 
SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END) -
SUM(CASE WHEN TipoMovimento ='S' THEN Quantidade else 0  END)
AS ClosingStock 

else
SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END)
as ClosingStock

1 Ответ

1 голос
/ 20 апреля 2020

Предполагая, что то, что вы показываете, является частью оператора SQL, я думаю, что вам нужно выражение case вместо выражения if . Первый - это условная логика c, которую вы можете использовать в своем запросе, а второй - структура управления потоком, которая вступает в действие в кодовых блоках, таких как хранимая процедура или аналогичная:

CASE WHEN MAX(A.OS) <> 0 
    THEN MAX(A.OS)
            + SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END) 
            - SUM(CASE WHEN TipoMovimento ='S' THEN Quantidade else 0  END)
    ELSE SUM(CASE WHEN TipoMovimento = 'E' THEN Quantidade  ELSE 0 END)
END as ClosingStock

На SQL сервере вы можете express тот же лог c с IIF(); Я предпочитаю CASE, потому что это стандартный SQL.

Обратите внимание, что псевдоним столбца объявляется только один раз, в конце выражения.

Также, предположительно, MAX(A,OS) - это должно быть MAX(A.OS).

...