Teradata には、Table_A と Table_B の 2 つのテーブルがあります。それらの間には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ステートメントにないCASE部分の属性も使用しています-これは次のようになります。
SUM (
CASE WHEN Attribute_X > 2 THEN attribute_Y*1.2
ELSE 0
End
もちろん最後に GROUP BY 1,2,...,N をやっています
「選択された非集計値は、関連付けられたグループの一部である必要があります」というエラーが表示されます。さらに、SELECT 部分で選択された属性の数の 10 億倍をチェックしましたが、それは N です。問題は、なぜこのエラーが発生するのかということです。SELECT 部分に含まれていない SUM 部分、つまり CASE 部分の属性 (attribute_X と attribute_Y) を使用しているからですか?
最終ステートメントの設計図は 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