我在Teradata中有两个表:Table_A和Table_B。它们之间是LEFT JOIN。之后,我使用包含两个表中属性的SELECT语句:选定的非聚合值必须是关联组的一部分
SELECT
attribute_1
attribute_2
...
attribute_N
后缀,我使用SUM函数来执行某些计算。这些函数看起来像这样:
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
(在此示例中使用select部分中的属性)。
但我也其中是不是在select语句CASE部分属性使用 - 这是liek这样的:
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
当然,在我做GROUP BY 1,2年底,...,N
我得到的错误是“选定的非聚合值必须是关联组的一部分”。 此外,我已经在SELECT部分中检查了所选属性数量的十亿倍,并且它是N. 问题是 - 为什么我得到这个错误?是因为我在SUM部分中使用了CASE部件属性(attribute_X和attribute_Y),它们不包含在SELECT部分中?
结束语的蓝图看起来像sthg。像这样:
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
我照你所描述的那样做了 - 仍然收到相同的信息。我的假设是,即使那些在CASE部分中使用的属性(即SUM部分 - 集合函数),也必须包含在SELECT部分中。这意味着它们必须包含在GROUP BY部分中(尽管我不需要它们)。这意味着我必须做另一个SELECT和另一个SUM才能获得我需要的完全数据。 – Adam
我发现了错误 - SUM部分由更多的子部分组成。例如“amount - SUM(...)+ SUM(...)”。我曾在“数量”部分包含属性。 – Adam