5

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
4

2 に答える 2

10

SELECTエラー メッセージは、ステートメントにリストされている非集計列のすべてが式に含まれていないことを示していますGROUP BY。「プレースホルダー」よりも多くの列がリストされていると思います。

これを回避する最善の方法は、すべての列に明示的に名前を付け、「相対位置」構文を使用しないことです。つまり、使用するのではなく、次のように使用しGROUP BY 1,2,...Nます。

GROUP BY
   attribute_1,
   attribute_2,
   ...
   attribute_N

それでも問題が解決しない場合は、質問を変更して、機能していない完全なクエリを表示してください。

于 2013-06-29T16:15:02.457 に答える