Sql server SQL Server:如何在嵌套的CASE上使用类似的CASE
我正在适应SQL,希望这里有人能帮我解决这个问题 我有一个存储过程,根据堆栈列是否包含某个项名称,我希望在其中传递不同的值。 如果它包含该项,那么QTYofItems将被4除,并将该答案四舍五入到最接近的整数。如果不包含,则只显示QTYofItems 到目前为止,我只在检查具有特定值的匹配时使用CASE,所以我不确定这一点。有人能告诉我以下内容是否有效和正确,或者让我知道如何正确书写(仅针对括号中的部分)Sql server SQL Server:如何在嵌套的CASE上使用类似的CASE,sql-server,Sql Server,我正在适应SQL,希望这里有人能帮我解决这个问题 我有一个存储过程,根据堆栈列是否包含某个项名称,我希望在其中传递不同的值。 如果它包含该项,那么QTYofItems将被4除,并将该答案四舍五入到最接近的整数。如果不包含,则只显示QTYofItems 到目前为止,我只在检查具有特定值的匹配时使用CASE,所以我不确定这一点。有人能告诉我以下内容是否有效和正确,或者让我知道如何正确书写(仅针对括号中的部分) 首先,我将开始使用表别名使读取sql语句更容易 类似于dbo.ItemSpecs as s
首先,我将开始使用表别名使读取sql语句更容易 类似于
dbo.ItemSpecs as spec
(spec将是别名,并使用它而不是整个表名)
case语句(假设您想要的逻辑是正确的)应该如下所示:
CASE
WHEN (dbo.ItemSpecs.ConfigProptext like '552%' AND dbo.ItemSpecs.ConfigProptext LIKE '%leg%' AND dbo.ItemSpecs.ConfigProptext LIKE '%Sled%') THEN dbo.WorkOrderDetails.QtyOrdered/4
WHEN dbo.ItemSpecs.ConfigProptext like '550%' THEN dbo.WorkOrderDetails.QtyOrdered/4
WHEN dbo.ItemSpecs.ConfigProptext like 'Akami%' THEN dbo.WorkOrderDetails.QtyOrdered/4
WHEN dbo.ItemSpecs.ConfigProptext like 'Circus%' THEN dbo.WorkOrderDetails.QtyOrdered/4
WHEN dbo.ItemSpecs.ConfigProptext like 'Coast%' THEN dbo.WorkOrderDetails.QtyOrdered/4
WHEN dbo.ItemSpecs.ConfigProptext like 'Chill Bar Stool%' THEN dbo.WorkOrderDetails.QtyOrdered/4
ELSE dbo.WorkOrderDetails.QtyOrdered
END as stackable
你需要一个当时的对手
SELECT
ISNULL(dbo.ItemSpecs.ConfigProptext, dbo.WorkOrderDetails.Description) AS Description,
ISNULL(dbo.WorkOrderDetails.QtyOrdered, '') AS QtyofItems,
CASE WHEN dbo.ItemSpecs.ConfigProptext LIKE '552%'
AND dbo.ItemSpecs.ConfigProptext LIKE '%leg%'
AND dbo.ItemSpecs.ConfigProptext LIKE '%Sled%'
THEN dbo.WorkOrderDetails.QtyOrdered/4 --<----------- Made assumptions here
WHEN dbo.ItemSpecs.ConfigProptext LIKE '550%'
AND dbo.ItemSpecs.ConfigProptext LIKE 'Akami%'
AND dbo.ItemSpecs.ConfigProptext LIKE 'Circus%'
THEN dbo.WorkOrderDetails.QtyOrdered/4 --<----------- Made assumptions here
WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Coast%'
THEN dbo.WorkOrderDetails.QtyOrdered/4 --<----------- Made assumptions here
WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Chill Bar Stool%'
THEN dbo.WorkOrderDetails.QtyOrdered/4
ELSE dbo.WorkOrderDetails.QtyOrdered
END
选择
ISNULL(dbo.ItemSpecs.ConfigProptext,dbo.WorkOrderDetails.Description)作为说明,
ISNULL(dbo.WorkOrderDetails.QtyOrdered“”)作为QtyofItems,
dbo.ItemSpecs.ConfigProptext类似“552%”时的情况
和dbo.ItemSpecs.ConfigProptext,如“%leg%”
和dbo.ItemSpecs.ConfigProptext,如“%Sled%”
然后dbo.WorkOrderDetails.QtyOrdered/4--我所做的是手动编码,比如:
CASE WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Project Cantilever%' THEN dbo.WorkOrderDetails.QtyOrdered / 4 WHEN dbo.ItemSpecs.ConfigProptext
LIKE 'Revolution%' THEN dbo.WorkOrderDetails.QtyOrdered / 4 WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Timber Cafe%' THEN dbo.WorkOrderDetails.QtyOrdered / 4 WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Web%' THEN dbo.WorkOrderDetails.QtyOrdered
/ 4 ELSE dbo.WorkOrderDetails.QtyOrdered / 4 END AS [Qty of Units]
在完成案例陈述后,您知道如何将结果四舍五入到最接近的整数吗?您可以使用四舍五入(50.56,0)
,结果将是51.00
谢谢!在完成案例陈述后,您知道如何将结果四舍五入到最接近的整数吗?您可以这样做,然后进行强制转换(dbo.workordedtails.QtyOrdered/4作为十进制(13,0))--如果不需要任何十进制,或者您可以进行四舍五入(dbo.workordedtails.QtyOrdered/4,0)--如果要查看小数位数
SELECT
...
CASE WHEN LEFT(dbo.ItemSpecs.ConfigProptext,3) IN ('552','550')
THEN <SomeValue>
...
ELSE dbo.WorkOrderDetails.QtyOrdered
END
CASE WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Project Cantilever%' THEN dbo.WorkOrderDetails.QtyOrdered / 4 WHEN dbo.ItemSpecs.ConfigProptext
LIKE 'Revolution%' THEN dbo.WorkOrderDetails.QtyOrdered / 4 WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Timber Cafe%' THEN dbo.WorkOrderDetails.QtyOrdered / 4 WHEN dbo.ItemSpecs.ConfigProptext LIKE 'Web%' THEN dbo.WorkOrderDetails.QtyOrdered
/ 4 ELSE dbo.WorkOrderDetails.QtyOrdered / 4 END AS [Qty of Units]