我正在试图弄清楚如何使这个公式适用于我的SQL Server 2012,它让我完全陷入困境。在我尝试设置case
列的第一个Dateupdated
语句中,在中间行,我将其作为
WHEN standardunitcost > (averageunitcost + 2.000000) THEN GETDATE()
我需要在其中添加额外的内容,以确保(Averageunitcost + 2.000000)
大于22.当我尝试将其设置为((Averageunitcost + 2.000000) > 22.000000)
时,它是不兼容的。
有人可以向我解释为什么我不能按照我目前的方式去做,以及如何正常工作?此外,我很抱歉,如果这是在错误的地方,或之前被问过,但我不确定要搜索什么来解决这个问题!
UPDATE [mas_wgd].[dbo].[CI_Item]
SET dateupdated = CASE
WHEN StandardUnitCost < AverageUnitCost THEN GETDATE()
WHEN standardunitcost > (AverageUnitCost + 2.000000) THEN GETDATE()
WHEN StandardUnitCost < 22.000000 THEN GETDATE()
ELSE dateupdated
END
WHERE ProductLine IN ('A010', 'A020', 'A030', 'A040', 'A050', 'A060', 'A070', 'A080', 'A090', 'A100', 'A110', 'A120', 'A130', 'A130', 'A140', 'A150', 'A200', 'A250', 'A300', 'A350', 'A400', 'A450', 'A500', 'A550', 'A600', 'AGNC', 'C010', 'C020', 'C030', 'C040', 'C050', 'C060', 'C070', 'C080', 'C090', 'C100', 'C110', 'C120', 'C130', 'C130', 'C140', 'C150', 'C200', 'C250', 'C300', 'C350', 'C400', 'C450', 'C500', 'C550', 'C600', 'CGNC')
UPDATE [mas_wgd].[dbo].[CI_Item]
SET Standardunitcost = CASE
WHEN (AverageUnitCost between 0.010000 and 22.000000) THEN 22.00000
WHEN AverageUnitCost > 22.000000 THEN AverageUnitCost + 2.000000
ELSE StandardUnitCost
END
WHERE ProductLine IN ('A010', 'A020', 'A030', 'A040', 'A050', 'A060', 'A070', 'A080', 'A090', 'A100', 'A110', 'A120', 'A130', 'A130', 'A140', 'A150', 'A200', 'A250', 'A300', 'A350', 'A400', 'A450', 'A500', 'A550', 'A600', 'AGNC', 'C010', 'C020', 'C030', 'C040', 'C050', 'C060', 'C070', 'C080', 'C090', 'C100', 'C110', 'C120', 'C130', 'C130', 'C140', 'C150', 'C200', 'C250', 'C300', 'C350', 'C400', 'C450', 'C500', 'C550', 'C600', 'CGNC')
答案 0 :(得分:1)
尚未发布无效的确切语法,但隐含为:
WHEN standardunitcost > ((Averageunitcost + 2.000000) > 22.000000) THEN GETDATE()
您不能像在许多语言中那样在SQL中进行复合比较操作。这些需要分解为与逻辑运算符AND
结合的单个操作。
CASE
WHEN StandardUnitCost < AverageUnitCost THEN GETDATE()
WHEN (AverageUnitCost + 2.0) > 22
AND StandardUnitCost > (AverageUnitCost + 2.0) THEN GETDATE()
WHEN StandardUnitCost < 22.0 THEN GETDATE()
ELSE DateUpdated
END
但是什么时候[StandardUnitCost] = 22.0?目前,如果StandardUnitCost不是&#34;&lt;&#34; AverageUnitCost(第一个条件),那么这个逻辑只检查&gt; 22.000002(或类似的东西)和&lt; 22.0。看起来这些比较中至少有一个需要是<=
或>=
。