2013-06-29 4 views
3

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 문에없는 CASE 부품 속성에서 사용 -이 liek 뭔가 : 물론

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

을 내가 1, 2에 의해 GROUP을하고있는 중이 야 말에, ..., N

내가 선택한 오류는 "선택한 비 집계 값은 연관된 그룹의 일부 여야합니다."입니다. 게다가, 나는 SELECT 부분에서 선택된 속성의 수를 십억 번 확인했으며, N입니다. 질문은 - 왜이 오류가 발생합니까? SELECT 부분에 포함되어 있지 않은 SUM 부분, 즉 CASE 부품 속성 (attribute_X 및 attribute_Y)을 사용하고 있기 때문입니까?

마지막 문장의 청사진이 보입니다. 같은 :

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 

답변

6

오류 메시지는 당신이 당신의 GROUP BY 표현에 SELECT 문에 나열된 모든 비 집계 열을 포함하지 않았 음을 시사한다. 나는 당신이 "자리 소지자"보다 많은 열을 가지고 있다고 생각합니다.

이 문제를 방지하는 가장 좋은 방법은 명시 적으로 모든 열의 이름을 지정하고 "상대 위치 지정"구문을 사용하지 않는 것입니다. 즉, 문제를 해결 귀하의 질문을 수정하고 작동하지 않는 완전한 쿼리를 표시하지 않는 경우

GROUP BY 
    attribute_1, 
    attribute_2, 
    ... 
    attribute_N 

: 즉,보다는 GROUP BY 1,2,...N 사용을 사용.

+0

나는 당신이 설명한대로했는데, 여전히 나는 같은 메시지를 얻고있다. 제 생각에 CASE 부분에서 사용되는 속성 (예 : SUM part - aggragate 함수)도 SELECT 부분에 포함되어야합니다. 이는 GROUP BY 부분에 포함되어야 함을 의미합니다 (비록 내가 필요 없다고하더라도). 즉, 필요한 데이터를 정확하게 얻기 위해 다른 SELECT와 다른 SUM을 수행해야한다는 의미입니다. – Adam

+0

오류를 발견했습니다. SUM 부분은 더 많은 하위 부품으로 구성되었습니다. 예 : "금액 - SUM (...) + SUM (...)". 나는 "양"부분에 속성을 포함 시켰습니다. – Adam

0

나는 SUM 부분이 더 많은 하위 부분들로 구성되어 있다는 오류를 발견했다. 예 : "금액 - SUM (...) + SUM (...)". 나는 "양"부분에 속성을 포함 시켰습니다.

관련 문제