Sql 错误3625:分组依据和不能包含聚合函数

Sql 错误3625:分组依据和不能包含聚合函数,sql,teradata,Sql,Teradata,我试图在假设的基础上进行计算,所以我假设我可以使用case-when函数来进行计算。例如: SELECT TRIM(EXTRACT(YEAR FROM business_date))||'Q'||TRIM((EXTRACT(MONTH FROM business_date)+2)/3)

我试图在假设的基础上进行计算,所以我假设我可以使用case-when函数来进行计算。例如:

SELECT                                                                                                          
TRIM(EXTRACT(YEAR FROM business_date))||'Q'||TRIM((EXTRACT(MONTH FROM business_date)+2)/3) as year_qtr,                 
case when orr_txt = '1' then  (sum(cast (rr9m as float)) / (sum(cast (total_observations as float)) - 0.5*sum(cast (lft as float)) )) end as  DR_1,
case when orr_txt = '2' then  (sum(cast (rr9m as float)) / (sum(cast (total_observations as float)) - 0.5*sum(cast (lft as float)) )) end as  DR_2,
case when orr_txt = '3' then  (sum(cast (rr9m as float)) / (sum(cast (total_observations as float)) - 0.5*sum(cast (lft as float)) )) end as  DR_3,
avg(cast (dp as float)) as Pred_PD                                  

FROM                                        
     raroc.pd_matrixRR a,                                       
     raroc.ccc_dp_sc  b,
     raroc.ratings_convert c                                        
WHERE                                                                                                   
     start_orr_code in (1)
     and case when a.scorecard_group = 'BB' then 'Business Banking' else a.scorecard_group end= b.rating_sys
     and a.orr_txt = b.bacrr
     and a.orr_txt = c.bacrr_text
     and orr_txt not in ('9-', '10', '11', '12', 'NR')                                      
     and rating_sys_grp = 'Scorecard'
     --and a.orr_txt = '1'
     --and scorecard_group = 'Large Corporation'
     --and scorecard_group = 'Large Corporation_FI'
     --and scorecard_group = 'Middle Market'
     --and scorecard_group = 'BB'
     --and scorecard_group = 'GCSBB'
     --and scorecard_group = 'Real Estate'
      and scorecard_group = 'Individuals'                                       
      and scorecard_group not like 'Sove%'                                      
      and scorecard_group not like 'Lega%'
      --and year_qtr < '2014Q2'                                                                                         
group by 1,2,3,4                            
ORDER BY 2,1
选择
TRIM(摘录(从营业日算起的年份))| |“Q”| TRIM((摘录(从营业日算起的月份)+2)/3)作为年度qtr,
当orr_txt='1'时,则(求和(将rr9m转换为浮点数))/(求和(将总观测值转换为浮点数))-0.5*求和(将lft转换为浮点数)))结束为DR_1,
当orr_txt='2'时,则(总和(以浮动形式转换为rr9m))/(总和(以浮动形式转换为总观测值))-0.5*总和(以浮动形式转换为lft)))结束为DR_2,
当orr_txt='3'时,则(求和(将rr9m转换为浮点数))/(求和(将总观测值转换为浮点数))-0.5*求和(将lft转换为浮点数)))结束为DR_3,
平均值(铸造(dp为浮动))为预制件
从…起
风险调整资本收益率,
风险调整资本收益率,
风险调整资本收益率
哪里
在(1)中启动或禁用代码
当a.scorecard\u group='BB'然后是'Business Banking',否则a.scorecard\u group end=b.rating\u sys
和a.orr_txt=b.bacrr
和a.orr_txt=c.bacrr_text
和orr_txt不在('9-'、'10'、'11'、'12'、'NR'中)
和评级系统grp=‘记分卡’
--和a.orr_txt='1'
--和记分卡组=‘大公司’
--和记分卡组=‘大公司’
--和记分卡组=‘中间市场’
--和记分卡组='BB'
--和记分卡组='GCSBB'
--和记分卡组=‘房地产’
和记分卡组=‘个人’
而记分卡组不像“Sove%”
而记分卡组不像“Lega%”
--以及2014年第四季度<'2014年第二季度'
按1,2,3,4分组
按2,1的顺序排列
它显然没有编译并嘲笑我的逻辑。但是,如果我不将其分组,我将得到一个错误3604。问题是,为了计算1类、2类和3类的利率,我将如何处理这个问题。 非常感谢

SP

您必须按

group by 
TRIM(EXTRACT(YEAR FROM business_date))||'Q'||TRIM((EXTRACT(MONTH FROM business_date)+2)/3)
, orr_txt

您需要将案例移动到聚合函数中,如下所示:

       (sum(case when orr_txt = '1' then cast (rr9m as float) end)
     / (sum(case when orr_txt = '1' then cast (total_observations as float) end)
  - 0.5*sum(case when orr_txt = '1' then cast (lft end as float) end ) )) end as  DR_1,

我想你只需要条件聚合。这些条件位于聚合函数内部。我认为这是您想要的表达式(当然,每个值重复3次:

SELECT . . .
       (sum(case when orr_txt = '1' then cast(rr9m as float) end) /
        sum(case when orr_txt = '1' then cast(total_observations as float) end) -
        0.5 * sum(case when orr_txt = '1' then cast(lft as float) end)
       ) as DR_1, . . .

然后,您可以将
groupby
更改为
groupby 1

您应该学会使用正确的显式
JOIN
语法。谢谢!非常有用!谢谢!非常有用!