Слишком много операторов iif Access SQL - PullRequest
0 голосов
/ 19 декабря 2018

У меня большое вложенное выражение iif.У меня есть 16 различных полей, которые мне нужно присвоить значение 1 или 0, в зависимости от их начального значения.Вот оно:

select
  iif(overlimitexception = "Yes",0,1) as OverLimit,
  iif(CashOutageIdentified = "Yes",0,1) AS CashOutage,
  iif(MissingAuditIdentified = "Yes",0,1) AS MissingAudit,
  iif(NightDropObserved = "Yes",0,1) AS NightDrop, 
  iif(SecurityTestComplete = "No",0,1) AS SecurityTest,
  iif(CashPatternIdentified = "Yes",0,1) AS CashPattern,
  iif(AllClearChange = "No",0,1) AS AllClear,
  iif(RobberyKitReview = "No",0,1),
  iif(EvacPlanReview = "No",0,1),
  iif(KeyComboIssue = "Yes",0,1) AS KeyCombo,
  iif(DualControlIssue = "Yes",0,1) AS DualControl,
  iif(TaIssue = "Yes", 0,1) AS TA,
  iif(CleanDeskIssue = "Yes",0,1) AS CleanDesk,
  iif(MonthlyOpsIssue = "Yes",0,1) AS MonthlyOps,
  iif(OverShortIssue = "Yes",0,1) AS OverShort,
  iif(CashTargetIssue = "Yes",0,1) AS CashTarget 
From [ROM Acknowledgement]

Я мог бы легко обойти это, если бы имел дело только с одним полем, но я имею дело с 16. Есть ли лучший способ сделать это?Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Предположим, что в указанных полях есть только значения "Нет" и "Да", вы можете написать это

  1 - eval(overlimitexception) as OverLimit,
  -eval(SecurityTestComplete) AS SecurityTest,

Или чуть быстрее

  3 - len(overlimitexception) as OverLimit,
  -2 + len(SecurityTestComplete) AS SecurityTest,
0 голосов
/ 20 декабря 2018

Если у вас аллергия на iif, возможны следующие варианты:

select
    1+(overlimitexception = "Yes") as OverLimit,
    1+(CashOutageIdentified = "Yes") AS CashOutage,
    1+(MissingAuditIdentified = "Yes") AS MissingAudit,
    1+(NightDropObserved = "Yes") AS NightDrop, 
    1+(SecurityTestComplete = "No") AS SecurityTest,
    1+(CashPatternIdentified = "Yes") AS CashPattern,
    1+(AllClearChange = "No") AS AllClear,
    1+(RobberyKitReview = "No"),
    1+(EvacPlanReview = "No"),
    1+(KeyComboIssue = "Yes") AS KeyCombo,
    1+(DualControlIssue = "Yes") AS DualControl,
    1+(TaIssue = "Yes") AS TA,
    1+(CleanDeskIssue = "Yes") AS CleanDesk,
    1+(MonthlyOpsIssue = "Yes") AS MonthlyOps,
    1+(OverShortIssue = "Yes") AS OverShort,
    1+(CashTargetIssue = "Yes") AS CashTarget 
from 
    [ROM Acknowledgement]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...