首页 > 解决方案 > SQL 中的 CASE WHEN 公式

问题描述

你能仔细检查一下我的公式是否正确吗?逻辑应该是如果 itemname 是 WEB,QTYORDERED 应该被 4 堆栈划分

在我的示例中,我得到的订单只有 1,但结果显示为 0。:(

正确的结果应该是 0.25 对吧?

CASE
   WHEN dbo.WorkOrderDetails.ItemNo = 'Web' 
      THEN ROUND(dbo.WorkOrderDetails.QtyOrdered / 4, 0)  
      ELSE dbo.WorkOrderDetails.QtyOrdered 
END AS NumberofItems

标签: sql-serversql-server-2008

解决方案


您的列的数据类型是什么?QtyOrdered如果是INT- 那么您正在执行整数除法( QtyOrdered / 4),如果QtyOrdered值为 1、2 或 3,则结果为0

如果您希望结果带有小数值,则需要使用小数股息 - 如下所示:

CASE
   WHEN dbo.WorkOrderDetails.ItemNo = 'Web' 
      THEN ROUND(dbo.WorkOrderDetails.QtyOrdered / 4.0, 0)  
      ELSE dbo.WorkOrderDetails.QtyOrdered         ^^^^
END AS NumberofItems

这将QtyOrdered = 1变成 0.25 等。


推荐阅读