Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SQL Server:如何在嵌套的CASE上使用类似的CASE_Sql Server - Fatal编程技术网

Sql server SQL Server:如何在嵌套的CASE上使用类似的CASE

Sql server SQL Server:如何在嵌套的CASE上使用类似的CASE,sql-server,Sql Server,我正在适应SQL,希望这里有人能帮我解决这个问题 我有一个存储过程,根据堆栈列是否包含某个项名称,我希望在其中传递不同的值。 如果它包含该项,那么QTYofItems将被4除,并将该答案四舍五入到最接近的整数。如果不包含,则只显示QTYofItems 到目前为止,我只在检查具有特定值的匹配时使用CASE,所以我不确定这一点。有人能告诉我以下内容是否有效和正确,或者让我知道如何正确书写(仅针对括号中的部分) 首先,我将开始使用表别名使读取sql语句更容易 类似于dbo.ItemSpecs as s

我正在适应SQL,希望这里有人能帮我解决这个问题

我有一个存储过程,根据堆栈列是否包含某个项名称,我希望在其中传递不同的值。 如果它包含该项,那么QTYofItems将被4除,并将该答案四舍五入到最接近的整数。如果不包含,则只显示QTYofItems

到目前为止,我只在检查具有特定值的匹配时使用CASE,所以我不确定这一点。有人能告诉我以下内容是否有效和正确,或者让我知道如何正确书写(仅针对括号中的部分)


首先,我将开始使用表别名使读取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]