2011-12-22 61 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列表中使用它們。