Certains non-valeurs d'agrégation doit faire partie du groupe de sociétés associées

J'ai deux tables dans Teradata: Table_A et Table_B. Entre eux, c'est une JOINTURE GAUCHE. Après, je vais faire une instruction SELECT qui contient des attributs des deux tables:

SELECT
attribute_1
attribute_2
...
attribute_N

Postfaces, je suis en utilisant la SOMME des fonctions pour effectuer certains calculs. Ces fonctions ressembler à quelque chose comme ceci:

SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End

(dans cet exemple, les attributs dans la partie select sont utilisés).

Mais j'ai aussi l'utiliser dans le CAS où une partie des attributs qui ne sont pas dans l'instruction select - quelque chose comme ceci:

SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End

Bien sûr, à la fin, je suis en train de faire GROUPE PAR 1,2,...,N

L'erreur que j'obtiens est "non-valeurs d'agrégation doit faire partie du groupe de sociétés associées."
De plus, j'ai vérifié milliards de fois le nombre d'attributs sélectionnés dans la partie SELECT, et il est N.
La question est pourquoi j'obtiens cette erreur? Est-ce parce que je suis à l'aide de la SOMME de la partie c'est à dire le CAS où une partie des attributs (attribute_X et attribute_Y) qui ne sont pas inclus dans la partie SELECT?

Plan de la fin-déclaration ressemble qqch. comme ceci:

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

OriginalL'auteur Adam | 2013-06-29