从可以为正也可以为负的值创建%

时间:2019-03-29 15:24:45

标签: sql sql-server

我正在处理一份报告,该报告应该显示库存准确性,然后显示准确性百分比。问题是库存可能过多(正)或短缺(负)。百分比将按位置

例如。

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 个答案:

答案 0 :(得分:1)

您可以使用CASE语句轻松完成此操作。棘手的部分是确保您对DECIMAL值进行计算。您可以以DECIMALs开头并强制转换为INT,也可以以INTs开头并将其强制转换为小数。

下面是一个使用临时表和示例数据的示例:

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