SELECT失败。 3504:选定的非聚合值必须是v14.10.05.09中关联组的一部分,而不是v14.00.07.02

时间:2015-07-16 06:30:11

标签: teradata

查询的select子句中共有9个字段,其中5个是直接字段。其中2个是select子句中的select查询的结果,另外2个来自使用在语句时使用的前2个字段的结果。 SUM聚合应用于最后两列。

所有前5列都列在group by子句中。

查询:

SELECT
sub.a,sub.b,sub.c,Table1.d,Table1.e,

(select x from table t1 where y=current_date) as f,

(select z from table t1 where y=w) as g,

sum(case when f=g then 1 else 0)) as h,

sum(case when f+1=g then 1 else 0)) as i

FROM Table1

LEFT JOIN

(SELECT a,b,c,l,m,n,o FROM Table2 INNER JOIN Table3 ON Table2.p=Table3.t)sub

ON Table1.e = sub.l

GROUP BY sub.a,sub.b,sub.c,Table1.d,Table1.e

以上查询在Teradata v14.10.05.09中完全正常,但在

时失败
  

" SELECT失败。 3504:选定的非聚合值必须是其中的一部分   关联组"

在Teradata v14.00.07.02。

这是因为新版本中引入的某些内容导致查询失败但在旧版本中运行正常吗? 或者我错过了什么?

先谢谢。

这是提出问题的实际查询:SELECT sub.key,sub.div,sub.reg_nm,tb_cal.calendar_yr,tb_cal.calendar_mth, (SEL fiscal_yr FROM db1.tb_cal tb_cal WHERE calendar_dt=CURRENT_DATE) current_fy, (SEL fiscal_yr FROM db1.tb_cal tb_cal WHERE calendar_dt=clse_dt) clse_dt_fy, SUM(CASE WHEN current_fy=clse_dt_fy THEN sub.amt ELSE 0 END) cnt FROM db1.tb_cal tb_cal
LEFT JOIN( SELECT tbl_a.key,tbl_a.stage,COALESCE(tbl_u.div, 'Un-assigned') div,COALESCE(tbl_u.reg_nm,'Un-assigned') reg_nm,tbl_a.clse_dt,tbl_a.amt FROM db_a.tbl_a tbl_a INNER JOIN db1.tbl_u tbl_u
ON tbl_u.unit_key=tbl_a.unit_key WHERE tbl_a.ctg IN ('G','O','C','F','I') AND tbl_a.stage NOT IN ('R', 'D', 'N','A') AND tbl_a.ind = 0 )sub ON sub.clse_dt = tb_cal.calendar_dt GROUP BY sub.key,sub.div,sub.reg_nm,tb_cal.calendar_yr,tb_cal.calendar_mth

1 个答案:

答案 0 :(得分:0)

                        SELECT
                      sub.key,
                      sub.div,
                      sub.reg_nm,
                      tb_cal.calendar_yr,
                      tb_cal.calendar_mth,
                      (SEL  fiscal_yr FROM db1.tb_cal tb_cal WHERE calendar_dt=CURRENT_DATE) current_fy,
                      (SEL fiscal_yr FROM db1.tb_cal tb_cal WHERE calendar_dt=clse_dt) clse_dt_fy,
                      SUM(CASE WHEN current_fy=clse_dt_fy THEN sub.amt ELSE 0 END) cnt
                    FROM db1.tb_cal tb_cal
                     LEFT JOIN(  SELECT
                       tbl_a.key,tbl_a.stage,COALESCE(tbl_u.div, 'Un-assigned') div,COALESCE(tbl_u.reg_nm,'Un-assigned') reg_nm,tbl_a.clse_dt,tbl_a.amt
                      FROM db_a.tbl_a tbl_a
                      INNER JOIN  db1.tbl_u tbl_u
                       ON tbl_u.unit_key=tbl_a.unit_key
                      WHERE tbl_a.ctg IN ('G','O','C','F','I') AND tbl_a.stage NOT IN ('R', 'D', 'N','A') AND tbl_a.ind = 0 
                    ) sub
                    ON sub.clse_dt =  tb_cal.calendar_dt
                    GROUP BY sub.key,sub.div,sub.reg_nm,tb_cal.calendar_yr,tb_cal.calendar_mth,current_fy,clse_dt_fy;

这应该可以正常工作。但是根据你的意见,你说在分组中添加最后一列将改变你所需的答案。如果是这种情况,您可以发布您想要的结果集。我们可以帮助你。虽然查看您的查询但是添加current_fy和clse_dt_fy似乎不会更改您当前的结果集。