Создание% из значений, которые могут быть как положительными, так и отрицательными - PullRequest
0 голосов
/ 29 марта 2019

Я работаю над отчетом, который должен показывать точность инвентаря, а затем процент точности. Проблема в том, что в инвентаре может быть переизбыток (положительный) или дефицит (отрицательный). Процент будет по местоположению

ех.

Loc.         expected qty   Actual QTY    % 
Location 1   48              48          100%
Location 2   52              53          98%
Location 3   48              45          93%
Location 4   48              48          100%

Как рассчитать дисперсию вместо отношения ожидаемого к фактическому?

1 Ответ

1 голос
/ 29 марта 2019

Вы можете сделать это довольно легко с помощью оператора CASE. Сложная задача - убедиться, что вы производите расчеты по ДЕСЯТИЧНЫМ значениям. Вы можете либо начать с десятичных чисел и привести к INT, либо начать с INT и приводить их к десятичным дробям в расчете.

Вот пример использования временной таблицы с вашими примерами данных:

CREATE TABLE #table1
(
    loc INT
    ,[expected qty] DECIMAL(10, 1)
    ,[Actual QTY] DECIMAL(10, 1)
)

INSERT INTO #table1
(
    loc
    ,[expected qty]
    ,[Actual QTY]
)
VALUES
(1, 48, 48)
,(2, 52, 53)
,(3, 48, 45)
,(4, 48, 48)

SELECT
    loc
    ,[expected qty] = CAST([expected qty] AS INT)
    ,[Actual QTY] = CAST([Actual QTY] AS INT)
    ,[Acc %] = CAST(CASE WHEN [expected qty] >= [Actual QTY]
                         THEN ( [Actual QTY] / [expected qty] ) * 100
                    WHEN [expected qty] < [Actual QTY]
                        THEN 100 - ((( [Actual QTY] / [expected qty] ) * 100 ) - 100 ) END AS INT)
FROM #table1

DROP TABLE #table1

Результаты:

loc expected qty    Actual QTY  Acc % 
1   48              48          100 
2   52              53          98 
3   48              45          93 
4   48              48          100
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...