2011-12-22 114 views
1

我有显示来自使用组通过第2代数据库表约5列如下所示:GROUP BY子句 - 的Oracle SQL

SELECT T1.COLUMN_A, T1.COLUMN_B, T1.COLUMN_C, SUM(T2.COLUMN_D) 
FROM TABLE1 T1, TABLE2 T2 
WHERE T1.COLUMN_A = T2.COLUMN_A 
GROUP BY T1.COLUMN_A 

现在COLUMN_B具有跨越所有行相同的值具有相同COLUMN_A和COLUMN_B是金额字段。 COLUMN_C是日期字段,并且在相同的COLUMN_A值中相同。

Ex。这里是虚拟数据表T1

COLUMN_A   COLUMN_B   COLUMN_C 
1     $25    09/15/2911 12:00:00 AM 
1     $25    09/15/2011 12:00:00 AM 
2     $20    12/12/2011 12:00:00 AM 
... 

表T2:

COLUMN_A  COLUMN_D 
1    $100 
1    $10 
2    $200 
2    $200 
..... 

运行查询,不与下面的错误工作:ORA-00979: not a GROUP BY expression

删除COLUMN_B和COLUMN_C会工作。不过,我也需要这些列。

任何人都可以请建议所需的更改?

回答

3

这应该工作

SELECT T1.COLUMN_A, T1.COLUMN_B, T1.COLUMN_C, SumColumnD 
FROM TABLE1 T1 
    INNER JOIN 
    (SELECT COLUMN_A, SUM(COLUMN_D) AS SumColumnD 
     FROM TABLE2 T2 
     GROUP BY COLUMN_A) t ON T1.COLUMN_A = t.COLUMN_A 
1

如果COLUMN_BCOLUMN_C值是跨越COLUMN_A相同的价值观是相同的,那么你可以简单地将它们添加到GROUP BY条款:

SELECT T1.COLUMN_A, T1.COLUMN_B, T1.COLUMN_C, SUM(T2.COLUMN_D) 
FROM TABLE1 T1, TABLE2 T2 
WHERE T1.COLUMN_A = T2.COLUMN_A 
GROUP BY T1.COLUMN_A, T1.COLUMN_B, T1.COLUMN_C 

你”在您的SELECT列表中指定了COLUMN_BCOLUMN_C列,因此Oracle需要为它们提供一个值,当GROUP ing BYCOLUMN_A。然而。 Oracle不知道这些列在COLUMN_A的相同值中是不变的,并且会出现错误,因为通常它无法为这些列返回值。

添加COLUMN_BCOLUMN_CGROUP BY条款不应影响到查询的结果,应该让你在你的SELECT列表中使用它们。