我有这个存储过程,它在 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
)
答案 0 :(得分:3)
这可能不是立即显而易见的,但是如果您希望100%达到最大数量,而超出的金额与不足的金额一样糟糕,那么一些创造性的减法和ABS
可以帮助您。
如果当前值位于名为@Precisao
的变量中,则它已经是表示百分比的0-100之间的数字:
100 - ABS(100 - @Precisao)
如果它是介于0.0到1.0之间的数字,则:
1.0 - ABS(1.0 - @Precisao)
将为您提供想要的结果。
您当然可以用当前表达式替换该变量,并用括号括起来。
答案 1 :(得分:1)
一个简单的案例应该起作用
SET Precisao = CASE WHEN EtiquetasInventariadas >= EtiquetasPorInventariar THEN 1.00 ELSE CAST(EtiquetasInventariadas AS DECIMAL) / CAST(EtiquetasPorInventariar AS DECIMAL) END