有人可以帮我解读这个查询吗?令人困惑的案例陈述

问题描述 投票:0回答:3

我很难读这个查询。我需要摆脱与“ShowStandadrdCost”有关的所有事情,所以最外层的情况。但我似乎无法弄清楚要删除哪些确切的行。

(CASE WHEN ISNULL(ShowStandardCost, 0) = 0 THEN
                CASE WHEN ISNULL(s.Actual_Cost, 0) = 0
                        THEN ISNULL(s.Standard_Cost, 0)
                        ELSE s.Actual_Cost  
                END
             ELSE ISNULL(s.Standard_Cost, 0)
        END + (CASE WHEN ISNULL(ShowStandardCost, 0) = 0 THEN
                CASE WHEN ISNULL(s.Actual_Cost, 0) = 0
                        THEN ISNULL(s.Standard_Cost, 0)
                        ELSE s.Actual_Cost  
                END
             ELSE ISNULL(s.Standard_Cost, 0)
        END ) Item_Cost_Per,

是整个查询

CASE WHEN ISNULL(s.Actual_Cost, 0) = 0
                            THEN ISNULL(s.Standard_Cost, 0)
                            ELSE s.Actual_Cost

添加内容我无法分辨。

sql sql-server case
3个回答
0
投票

这可能是我写表达式的方式。

CASE WHEN ShowStandardCost <> 0 --Maybe (ShowStandardCost = 1)?
    THEN ISNULL(s.Standard_Cost, 0)
    ELSE --Show Actual Cost, unless it's zero or null. 
         --If so, show Standard_Cost unless it's null. 
         --Only show zero if both columns are zero or null.
        COALESCE( NULLIF( s.Actual_Cost, 0), s.Standard_Cost, 0)
    END * 2 --The CASE expression is just repeating itself.

0
投票

试试这个,不确定你是否想要这个,

CASE WHEN ISNULL(s.Actual_Cost, 0) = 0 THEN ISNULL(s.Standard_Cost, 0) ELSE s.Actual_Cost end Item_Cost_Per

实际查询在下面评论,

/*(CASE WHEN ISNULL(ShowStandardCost, 0) = 0 THEN */
                CASE WHEN ISNULL(s.Actual_Cost, 0) = 0
                        THEN ISNULL(s.Standard_Cost, 0)
                        ELSE s.Actual_Cost  
                END
            /* ELSE ISNULL(s.Standard_Cost, 0)
        END + (CASE WHEN ISNULL(ShowStandardCost, 0) = 0 THEN
                CASE WHEN ISNULL(s.Actual_Cost, 0) = 0
                        THEN ISNULL(s.Standard_Cost, 0)
                        ELSE s.Actual_Cost  
                END
             ELSE ISNULL(s.Standard_Cost, 0)
        END ) */ Item_Cost_Per,

0
投票
If ShowStandardCost = null Then
   If Actual_Cost =  null Then
       If Standard_Cost = null Then 0 Else Standard_Cost
   Else Actual_Cost
End

然后语句重复并将该值添加到自身。我只是用parens包围第一部分,如果是我,最后加上“* 2”。

(CASE WHEN ISNULL(ShowStandardCost, 0) = 0 THEN
         CASE WHEN ISNULL(s.Actual_Cost, 0) = 0
                THEN ISNULL(s.Standard_Cost, 0)
                ELSE s.Actual_Cost  
         END
      ELSE ISNULL(s.Standard_Cost, 0)
  END) * 2
© www.soinside.com 2019 - 2024. All rights reserved.