2013-06-29 25 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部分中的属性)。

但我也其中是不是在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 

回答

6

错误消息表明您还没有包含在GROUP BY表达你的SELECT声明中列出的所有非集合列。我猜测你列出的专栏比你拥有的“占位者”多。

避免这种情况的最好方法是明确命名所有列而不使用“相对定位”语法。换句话说,而不是使用​​使用:

GROUP BY 
    attribute_1, 
    attribute_2, 
    ... 
    attribute_N 

如果不解决您的问题,修改您的问题,并表明不工作完整的查询。

+0

我照你所描述的那样做了 - 仍然收到相同的信息。我的假设是,即使那些在CASE部分中使用的属性(即SUM部分 - 集合函数),也必须包含在SELECT部分​​中。这意味着它们必须包含在GROUP BY部分中(尽管我不需要它们)。这意味着我必须做另一个SELECT和另一个SUM才能获得我需要的完全数据。 – Adam

+0

我发现了错误 - SUM部分由更多的子部分组成。例如“amount - SUM(...)+ SUM(...)”。我曾在“数量”部分包含属性。 – Adam

0

我发现了错误 - SUM部分由更多的子部分组成。例如“amount - SUM(...)+ SUM(...)”。我曾在“数量”部分包含属性。

相关问题