T SQL Можно ли сделать NULLIF, если столбец меньше 15% другого столбца? - PullRequest
0 голосов
/ 19 июня 2020

У меня есть большой запрос, который я пытаюсь отредактировать, чтобы вставить столбцы 40i sh в базу данных в определенное c время дня по причинам тенденции.

В настоящее время запрос выполняет NULLIF(Linespeed, 0), но я бы предпочел, чтобы он работал примерно так, как

NULLIF(Linespeed > Linespeed_Target * 15) 

(я знаю, что это не работает). Я не могу понять, как бы я сделал для этого case-заявление. Я также не думаю, что смогу сделать это в предложении where, потому что у меня есть другой столбец, который ищет, где Linespeed - любое значение.

Код здесь:

Nullif(Round(Avg(Nullif(Linespeed, 0)) / Avg(LineSpeed_Target), 2), 0) as 'LS OEE' 

Причина, по которой я не могу использовать предложение where:

NullIF(Round(Cast(count(NULLIF(0 ,LineSpeed)) / Cast(Count(Linespeed) as float) as float), 2), 0) as 'Avail OEE'

Изображение результатов

Ответы [ 2 ]

0 голосов
/ 19 июня 2020

Джерун действительно указал мне решение!

В итоге я использовал следующее:

Nullif(Round(Avg((Case when Linespeed < Linespeed_Target * .10 then NULL Else Linespeed End)) / Avg(LineSpeed_Target), 2), 0) as 'LS OEE',
0 голосов
/ 19 июня 2020

Из комментариев:

Столбец LS AVG должен быть AVG значений, когда значение выше 15% от целевой скорости линии

Это будет:

avg(case when linespeed > linespeed_target * 0.15 then linespeed end)

Выражение case возвращает null для значений, не соответствующих условию, которое avg() игнорирует.

...