【发布时间】:2015-10-05 11:01:44
【问题描述】:
查询的select子句共有9个字段,其中5个是直接字段。其中 2 个是 select 子句中选择查询的结果,另外 2 个是使用 case when 语句中使用的前 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 Failed. 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
【问题讨论】:
-
您还应该在 group by 子句中包含 f 和 g。 @nhm
-
但是添加 f 和 g 查询会给我不同的总和结果。总和的计算会出错。我想知道相同的查询如何在 Teradata 的一个实例中正常工作而在另一个实例中失败。为了实现相同的功能,我还能做些什么
-
尝试将标量子查询更改为 MIN:
(select MIN(z) from table t1...)。顺便说一句,将 f 和 g 添加到 GROUP BY 应该不会改变结果,两者似乎都没有相关性......你能显示where y=w的实际代码吗? -
将 MIN 添加到标量子查询会导致另一个错误。 y=w 的代码如下: SEL accounting_yr FROM db.tbl1 WHERE calendar_dt=colse_dt
-
哪个错误?
SEL fiscal_yr FROM db.tbl1 WHERE calendar_dt=colse_dt,这是否返回单个值,calendar_dt和colse_dt都是来自db.tbl1的列?或者它是否与 GROUP BY 列之一相关?完整的源代码会很有帮助,否则很难判断 14 或 14.10 是否做错了......
标签: teradata