Ada*_*dam 3 sql group-by case teradata
我在Teradata中有两个表:Table_A和Table_B.他们之间是LEFT JOIN.之后我正在制作SELECT语句,其中包含两个表的属性:
SELECT
attribute_1
attribute_2
...
attribute_N
Run Code Online (Sandbox Code Playgroud)
后来,我使用SUM函数进行某些计算.这些函数看起来像这样:
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
Run Code Online (Sandbox Code Playgroud)
(在此示例中,使用选择部分中的属性).
但我也在CASE部分属性中使用了不在select语句中的东西 - 有点谎言:
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
Run Code Online (Sandbox Code Playgroud)
当然最后我正在做GROUP BY 1,2,...,N
我得到的错误是"选定的非聚合值必须是关联组的一部分." 此外,我已经检查了SELECT部分中所选属性数十亿倍,它是N.问题是 - 为什么我会收到此错误?是因为我在SUM部分使用,即CASE部分属性(attribute_X和attribute_Y),它们不包含在SELECT部分中?
最终陈述的蓝图看起来很像.像这样:
INSERT INTO table_new
SELECT
attribute_1,
attribute_2,
...
attribute_N,
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
) as sum_a,
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
) as sum_X
FROM table_a LEFT JOIN table_B
ON ...
GROUP BY 1,2,...,N
Run Code Online (Sandbox Code Playgroud)
该错误消息表明您未SELECT在GROUP BY表达式中包含语句中列出的所有非聚合列.我猜你列的列数多于"占位符".
避免这种情况的最佳方法是明确命名所有列,而不是使用"相对定位"语法.换句话说,而不是GROUP BY 1,2,...N使用:
GROUP BY
attribute_1,
attribute_2,
...
attribute_N
Run Code Online (Sandbox Code Playgroud)
如果这不能解决您的问题,请修改您的问题并显示无效的完整查询.