将Crystal IF语句转换为SQL

将Crystal IF语句转换为SQL,sql,tsql,crystal-reports,crystal-reports-xi,Sql,Tsql,Crystal Reports,Crystal Reports Xi,我正在将Crystal报表转换为SQL查询。Crystal报告中嵌入了公式 我试图将Crystal IF语句转换为SQL WHERE子句 这是水晶配方 if {loanview.LOAN_STATUS} in ["COMMITMENT","APPLICATION","PA_APPROVED","PRE_CLOSING","FUND_HOLD","GRANTSOURCE"] then "SHOW" else if {loanview.LOAN_STATUS} in ["CURRENT","LA

我正在将Crystal报表转换为SQL查询。Crystal报告中嵌入了公式

我试图将Crystal IF语句转换为SQL WHERE子句

这是水晶配方

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
如果{loanview.LOAN_STATUS}in
[“承诺”、“申请”、“PA_批准”、“预结算”、“基金持有”、“赠款来源”]然后“显示”其他内容
如果{loanview.LOAN_STATUS}位于[“当前”、“延迟+30”、“延迟+60”、“延迟+90”、“关闭”]
和{BILLINFO.REVOLVING_CR}=“”和{balview.GBOOK_VALUE_P}=0,然后“隐藏”else
如果{loanview.LOAN_STATUS}位于[“当前”、“延迟+30”、“延迟+60”、“延迟+90”、“关闭”]
和{BILLINFO.REVOLVING_CR}=”“和{balview.GBOOK_VALUE_P}0,然后“显示”else
看起来我需要一个WHERE子句。我的想法是WHERE=水晶秀,然后省略水晶隐藏部分。这有意义吗

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
          )
在哪里
(
loanview.LOAN_状态(‘承诺’、‘申请’、‘PA_批准’、‘预结算’、‘基金持有’,
“GRANTSOURCE”
)
或
(
loanview.LOAN_状态为('CURRENT','LATE+30','LATE+60','DELINQ+90','CLOSED')
和BILLINFO.r=''
和balview.GBOOK_值_P 0
)
是的,很好。 唯一的失败点可能是公式设置为null的默认值。这意味着null BILLINFO.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
          )
)
在哪里
(
loanview.LOAN_状态(‘承诺’、‘申请’、‘PA_批准’、‘预结算’、‘基金持有’,
“GRANTSOURCE”
)
或
(
loanview.LOAN_状态为('CURRENT','LATE+30','LATE+60','DELINQ+90','CLOSED')
和(BILLINFO.REVOLVING\u CR=''或BILLINFO.REVOLVING\u CR为空)
和balview.GBOOK_值_P 0
)
)
是的,很好。 唯一的失败点可能是公式设置为null的默认值。这意味着null BILLINFO.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
          )
)
在哪里
(
loanview.LOAN_状态(‘承诺’、‘申请’、‘PA_批准’、‘预结算’、‘基金持有’,
“GRANTSOURCE”
)
或
(
loanview.LOAN_状态为('CURRENT','LATE+30','LATE+60','DELINQ+90','CLOSED')
和(BILLINFO.REVOLVING\u CR=''或BILLINFO.REVOLVING\u CR为空)
和balview.GBOOK_值_P 0
)
)