Преобразование операторов Crystal IF в SQL - PullRequest
0 голосов
/ 29 мая 2019

Я конвертирую отчет Crystal Report в запрос SQL.Внедрение в Crystal Report формул.

Я пытаюсь преобразовать операторы Crystal IF в предложение SQL WHERE

Это формула Crystal

if {loanview.LOAN_STATUS} in 
["COMMITMENT","APPLICATION","PA_APPROVED","PRE_CLOSING","FUND_HOLD","GRANTSOURCE"] then "SHOW" else

if {loanview.LOAN_STATUS} in ["CURRENT","LATE+30","LATE+60","DELINQ+90","CLOSED"] 
and {BILLINFO.REVOLVING_CR} = "" and {balview.GBOOK_VALUE_P} = 0 then "HIDE" else

if {loanview.LOAN_STATUS} in ["CURRENT","LATE+30","LATE+60","DELINQ+90","CLOSED"] 
and {BILLINFO.REVOLVING_CR} = "" and {balview.GBOOK_VALUE_P} <> 0 then "SHOW" else

Это выглядиткак мне нужен пункт ГДЕ.Моя мысль: ГДЕ = Кристаллическое ШОУ, а затем просто опускаю Кристаллическую СКРЫТУЮ часть.Имеет ли это смысл?

WHERE
      (
          loanview.LOAN_STATUS IN ( 'COMMITMENT', 'APPLICATION', 'PA_APPROVED', 'PRE_CLOSING', 'FUND_HOLD',
                                    'GRANTSOURCE'
                                  )
          OR
          (
              loanview.LOAN_STATUS IN ( 'CURRENT', 'LATE+30', 'LATE+60', 'DELINQ+90', 'CLOSED' )
              AND BILLINFO.REVOLVING_CR = ''
              AND balview.GBOOK_VALUE_P <> 0
          )

1 Ответ

2 голосов
/ 29 мая 2019

Да, все в порядке.Единственной точкой отказа может быть, если в формуле заданы значения по умолчанию для нуля.Это означает, что нулевое значение BILLINFO.REVOLVING_CR автоматически преобразуется в пустую строку.Поэтому лучший способ написать это просто для уверенности:

WHERE
      (
          loanview.LOAN_STATUS IN ( 'COMMITMENT', 'APPLICATION', 'PA_APPROVED', 'PRE_CLOSING', 'FUND_HOLD',
                                    'GRANTSOURCE'
                                  )
          OR
          (
              loanview.LOAN_STATUS IN ( 'CURRENT', 'LATE+30', 'LATE+60', 'DELINQ+90', 'CLOSED' )
              AND (BILLINFO.REVOLVING_CR = '' or BILLINFO.REVOLVING_CR IS NULL)
              AND balview.GBOOK_VALUE_P <> 0
          )
)
...