【发布时间】:2013-06-27 01:31:21
【问题描述】:
我在 Teradata 中有两个表:Table_A 和 Table_B。它们之间是左连接。之后我正在制作包含两个表中的属性的 SELECT 语句:
SELECT
attribute_1
attribute_2
...
attribute_N
后记,我正在使用 SUM 函数进行某些计算。这些函数看起来像这样:
SUM (
CASE WHEN Attribute_1 > 2 THEN attribute_2*1.2
ELSE 0
End
(在此示例中使用了选择部分中的属性)。
但我也在 CASE 部分中使用了不在 select 语句中的属性 - 类似这样:
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 部分中?
结束语句的蓝图看起来……像这样:
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
【问题讨论】:
标签: sql group-by case teradata