我很难读这个查询。我需要摆脱与“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
添加内容我无法分辨。
这可能是我写表达式的方式。
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.
试试这个,不确定你是否想要这个,
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,
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