SQL语句中,WHERE子句不能有聚合函数问题

一般SQL语句中,WHERE子句是不能含有聚合函数的,否则报错:group function is not allowed here,那么我们如何去处理呢?

如下SQL:

SELECT
   T1.Loan_Contract_Id              AS Contract_Id
   ,CAST('20111231' AS DATE FORMAT 'YYYYMMDD' ) AS Statis_Dt
   ,T1.Agmt_Holder                               AS Cust_Id
   ,T1.Loan_Amt                                  AS Contract_Amt
   ,null                                         AS ApplicantApp_Loan_Amt
   ,T1.Adv_Dt                                    AS Contr_Eff_Time
   ,T1.Mature_Dt                                 AS Contr_End_Time
   ,case when cast(substr(T1.Loan_Term,5,2) as integer) >0 then cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer)+1
   else cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer) end AS Contr_Term_Month
   ,null                                         AS Margin_Amt
FROM DEV_DW_RDL.R04_B_IL_Contract T1
WHERE
   T1.Data_Dt=cast('20111231' as date format 'YYYYMMDD')
AND (T1.Loan_Appl_Approve_Stat_Cd='5' OR (T1.Loan_Appl_Approve_Stat_Cd='4' AND T1.Loan_Contract_Id IN (SELECT Approve_Content_Id FROM  DW_PVIEW.T05_IL_Approve_Evt WHERE MAX(Txn_Dt)=CAST('20111231' as date format 'YYYYMMDD'))))
;

因为WHERE子句中含有MAX聚合函数,会报SELECT Failed. 3569:  Improper use of an aggregate function in a WHERE Clause.错误。

作如下修改:

SELECT
   T1.Loan_Contract_Id              AS Contract_Id
   ,CAST('20111231' AS DATE FORMAT 'YYYYMMDD' ) AS Statis_Dt
   ,T1.Agmt_Holder                               AS Cust_Id
   ,T1.Loan_Amt                                  AS Contract_Amt
   ,null                                         AS ApplicantApp_Loan_Amt
   ,T1.Adv_Dt                                    AS Contr_Eff_Time
   ,T1.Mature_Dt                                 AS Contr_End_Time
   ,case when cast(substr(T1.Loan_Term,5,2) as integer) >0 then cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer)+1
   else cast(substr(T1.Loan_Term,1,2) as integer)*12+cast(substr(T1.Loan_Term,3,2) as integer) end AS Contr_Term_Month
   ,null                                         AS Margin_Amt
FROM DEV_DW_RDL.R04_B_IL_Contract T1
WHERE
   T1.Data_Dt=cast('20111231' as date format 'YYYYMMDD')
AND (T1.Loan_Appl_Approve_Stat_Cd='5'
           OR (T1.Loan_Appl_Approve_Stat_Cd='4'
                    AND T1.Loan_Contract_Id IN ( SELECT tmp.Approve_Content_Id FROM
                    (SELECT Approve_Content_Id,MAX(Txn_Dt) AS Max_Txn_Dt FROM  DW_PVIEW.T05_IL_Approve_Evt GROUP BY Approve_Content_Id) tmp
                    WHERE tmp.Max_Txn_Dt=CAST('20111231' as date format 'YYYYMMDD'))))
;

将聚合函数置于子集中,那么问题就迎刃而解了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值