Вы можете сделать это довольно легко с помощью оператора 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