减去金额> 100%

时间:2019-03-18 14:39:51

标签: sql-server

我有这个存储过程,它在 EtiquetasInventariadas 列中更新了已验证项目的数量,在Precisão列中将验证了多少个项目的百分比与 EtiquetasPorInventariar

上可用的项目总数
ALTER PROCEDURE [dbo].[spx_UPDATE_EtiquetasInventariadas]
@EtiquetasInventariadas int, 
@InventarioID int,
@LocalizacaoID int 
AS
BEGIN



UPDATE xLocalizacao
    SET EtiquetasInventariadas = EtiquetasInventariadas + @EtiquetasInventariadas, IsValid = 1
    WHERE (LocalizacaoID = @LocalizacaoID)

    UPDATE xLocalizacao
    SET Precisao = CAST(EtiquetasInventariadas AS DECIMAL) / CAST(EtiquetasPorInventariar AS DECIMAL)
    WHERE LocalizacaoID = @LocalizacaoID 

    IF NOT EXISTS(SELECT 1 FROM xLocalizacao WHERE InventarioID = @InventarioID AND isValid = 0)
    BEGIN 
        SELECT 1 
    END
    ELSE
    BEGIN
        SELECT -1
    END
END

但是,我被问到如果 EtiquetasInventariadas 的数量大于 EtiquetasPorInventariar 中的数量,则应该减去100%以上的数量,我似乎无法了解如何执行此操作的逻辑。

编辑

如果值大于100,则减去

如果结果为120%,则应显示80%

这是xLocalizacao的表定义

CREATE TABLE [dbo].[xLocalizacao](
    [LocalizacaoID] [int] IDENTITY(1,1) NOT NULL,
    [Localizacao] [nvarchar](20) NOT NULL,
    [EtiquetasPorInventariar] [int] NOT NULL,
    [EtiquetasInventariadas] [int] NOT NULL,
    [IsValid] [bit] NOT NULL,
    [InventarioID] [int] NOT NULL,
    [Precisao] [decimal](3, 2) NULL
)

2 个答案:

答案 0 :(得分:3)

这可能不是立即显而易见的,但是如果您希望100%达到最大数量,而超出的金额与不足的金额一样糟糕,那么一些创造性的减法和ABS可以帮助您。

如果当前值位于名为@Precisao的变量中,则它已经是表示百分比的0-100之间的数字:

100 - ABS(100 - @Precisao)

如果它是介于0.0到1.0之间的数字,则:

1.0 - ABS(1.0 - @Precisao)

将为您提供想要的结果。

您当然可以用当前表达式替换该变量,并用括号括起来。

来自fooplot.com

enter image description here

答案 1 :(得分:1)

一个简单的案例应该起作用

SET Precisao = CASE WHEN EtiquetasInventariadas >= EtiquetasPorInventariar THEN 1.00 ELSE CAST(EtiquetasInventariadas AS DECIMAL) / CAST(EtiquetasPorInventariar AS DECIMAL) END