Как я могу написать выражение case / If-then, чтобы создать категориальную переменную, которая правильно принимает указанные условия? - PullRequest
0 голосов
/ 27 сентября 2018

В настоящее время я работаю над проектом, который был бы значительно улучшен, если бы я мог правильно понять этот SQL!Я хочу ВЫБРАТЬ различные переменные, окружающие транспортные средства, для представления в виде таблицы в Таблице, но при создании вычисляемого поля (в таблице) и использовании условного формата If-then не все параметры отображаются в графике, и некоторые результатыдаже неправильно представлены определенными опциями!

Например:

В приведенном ниже операторе скелета создается поле с именем MissingNumber, в котором, если «----- 1» равно true, тогда MissingNumber примет значение «Число 1».

          If ------1 Then 'Number 1'
             ELSEIF
          If ------2 Then 'Number 2'
             ELSEIF
          If ------3 Then 'Number 3'
             ELSEIF
          If ------4 Then 'Number 4'
             ELSE 'Number 5'
          END

В соответствии с указанным выше форматом в качестве руководства, «Номер 1», «Номер 2» и «Номер 5» представлены категорически, но НЕ «Номер 3» или «Номер 4», хотя я знаю, что данныеудовлетворяет 'Number 3' и 'Number 4' во многих записях!

Я считаю, что здесь есть проблема с порядком (или какая-то другая непредвиденная проблема), поэтому я попытался использовать оператор case:

    CASE 
         WHEN (Rtrim((v.plt_no)) is null) or (Rtrim(v.plt_no = '')) THEN "Plate Only" 

         WHEN (v.rnw_dt is null) THEN "Expiration Only"

         WHEN ((DocumentTemplate is null) or (DocumentTemplate = '')) THEN "Registration Only"

         WHEN (Rtrim((v.plt_no)) is null or Rtrim(v.plt_no = '')) AND (v.rnw_dt is null) THEN "Plate & Expiration"

         WHEN (Rtrim((v.plt_no)) is null or Rtrim(v.plt_no = '')) AND ((DocumentTemplate is null) or (DocumentTemplate = '')) THEN "Plate & Registration"

         WHEN (v.rnw_dt is null) AND ((DocumentTemplate is null) or (DocumentTemplate = '')) THEN "Expiration & Registration"

    ELSE "All Good"

END AS MissingInfo

Мой ВОПРОС: Какой совет имеет сообщество о том, следует ли мне продолжать пробовать формат IF-Then в таблице или создавать переменную Missing Info в SQL?

ТАКЖЕ с предложеннымВыбор, как я могу повлиять на код, чтобы ВСЕ параметры были правильно представлены кросс-таблицей ("MissingInfo" на стороне строки, "Состояние номерного знака" на стороне столбца).Я связал фрагмент кода и пример кросс-таблицы для справки!Пожалуйста, дайте мне знать, если будет что-то еще, что мне нужно будет включить, чтобы прояснить это!** ПРИМЕЧАНИЕ на изображении таблицы "Только пластина" НЕ отображается на графике!

Код-SNIP

Tableau-CrossTab

ResultSet для теста «Plate Only»

- Результаты неожиданные, поскольку отсутствует plt_no (что мы хотим), но поле шаблона документа имеет значение NULL в 3 записях.В этом случае 3 NULL в поле DocumentTemplate должны квалифицировать эти записи как «Только для таблички и регистрации» в переменной MissingInfo

1 Ответ

0 голосов
/ 08 октября 2018

Вы (в основном)

"условие1 ИЛИ условие2 И условие3"

, что оценивается как

«условие1 ИЛИ (условие2 И условие3)».

Добавьте круглые скобки, чтобы сделать это

"(условие1 ИЛИ условие2) И условие3".

Лично, когда у меня есть комбинацияAND и OR в условии, я всегда использую скобки, чтобы сделать порядок оценки понятным, даже если они не являются строго обязательными.

...