Может кто-нибудь помочь мне расшифровать этот запрос? Запутанные заявления случая - PullRequest
0 голосов
/ 12 апреля 2019

Мне трудно читать этот запрос. Мне нужно избавиться от всего, что связано с «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

Что добавляется, я не могу сказать.

Ответы [ 3 ]

0 голосов
/ 12 апреля 2019

попробуйте, не уверен, если хотите,

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 голосов
/ 12 апреля 2019
If ShowStandardCost = null Then
   If Actual_Cost =  null Then
       If Standard_Cost = null Then 0 Else Standard_Cost
   Else Actual_Cost
End

Затем оператор повторяется и добавляет это значение к себе.Я бы просто окружил первую часть паренами и добавил бы "* 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
0 голосов
/ 12 апреля 2019

Наверное, так я бы написал выражение.

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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...