错误:使用equals(=)的表达式具有不同数据类型的组件

时间:2018-02-19 08:50:27

标签: database error-handling sas

美好的一天

一直试图在互联网上寻找答案,但不得不提出问题,因为它似乎不是一个标准的数据类型问题。

我收到错误: 错误:使用equals(=)的表达式具有不同数据类型的组件。

这是剧本:

Create Table Work.Gross_Premiums_&Report_Date as
Select Distinct  AIC.POLICY_NUMBER,
                 IFC(AIC.SOURCE_DATA in ('ID','PL','FSP'),(Substr(AIC.FORMATTED_ACCOUNT_NUMBER,3,13)||"*"||Substr(AIC.FORMATTED_ACCOUNT_NUMBER,14,3)),FORMATTED_ACCOUNT_NUMBER) as FORMATTED_POLICY_NUMBER,
                 AIC.SOURCE_DATA,
                 SUM(ID.Prem) AS ID_GROSS_PREMIUM,
                 SUM(AFS.GROSS_PREMIUM) AS AFS_GROSS_PREMIUM,
                 SUM(PL.PremInclVat) as PL_GROSS_PREMIUM,
                 SUM(FSP.Premium_charged) as FSP_GROSS_PREMIUM,
                 SUM(IJ.GROSS_PREMIUM) AS IJ_GROSS_PREMIUM,
                 SUM(SUM(ID.Prem),SUM(AFS.GROSS_PREMIUM),SUM(PL.PremInclVat),SUM(FSP.Premium_charged),SUM(IJ.GROSS_PREMIUM)) as WIMI_INCOME

                 From WORK.AIC_&Report_Date AIC
                 Left Join IDIRECT.TRNWRITTEN ID On (AIC.POLICY_NUMBER = (ID.ClientID || ID.FileNo))
                 Left Join WORK.AFS_&Report_Date AFS On (AIC.FORMATTED_ACCOUNT_NUMBER = AFS.ACCOUNT_NUMBER) 
                 Left Join PL.TRNWRITTENPREM PL On (AIC.POLICY_NUMBER = Put(PL.ClientID,z8.)||Put(PL.FileNo,z3.))
                 Left Join FSP.POLICY_TRANSACTIONS FSP On (AIC.FORMATTED_ACCOUNT_NUMBER = Put(FSP.POLICY_NUMBER,z16.) )
                 Left Join WORK.INSUREJ IJ on (AIC.POLICY_NUMBER = IJ.POLICY_NUMBER)

                 Where (AIC.SOURCE_DATA = 'FSP' 
                        and InPut(Put(Input('Transaction date'n,ANYDTDTM19.),DATETIME21.2),Date9.) Between INTNX('MONTH',"&Report_Date."d,0,'BEGIN') 
                        and "&Report_Date."d and 'Paid / unpaid'n = 1) 
                         OR AIC.SOURCE_DATA <> 'FSP'
                 Group By AIC.POLICY_NUMBER, AIC.SOURCE_DATA, (CALCULATED FORMATTED_POLICY_NUMBER);

如果有人能帮助确定问题,我们将不胜感激。

祝你好运, 尤金

2 个答案:

答案 0 :(得分:0)

这意味着您要比较数值和字符值。最有可能的罪魁祸首是(AIC.POLICY_NUMBER = IJ.POLICY_NUMBER)(AIC.POLICY_NUMBER = (ID.ClientID || ID.FileNo))

在第一个示例中,检查两个policy_number变量以确保它们是相同的数据类型。 对于第二个示例,如果AIC.POLICY_NUMBER是数字,那么当您与字符值进行比较时,您将收到错误消息

答案 1 :(得分:0)

您的代码的这一部分也存在问题:

InPut(Put(Input('Transaction date'n,ANYDTDTM19.),DATETIME21.2),Date9.)

我希望看到DATEPART()DTDATE9.用于将变量转换为日期时间。如果不提前确切知道它的样子,这是一个猜测,但我认为这是你的问题:

datepart(input('Transaction date'n, ANYDTDTM19.)) between  ...