Группировка по предложению - Oracle SQL - PullRequest
1 голос
/ 22 декабря 2011

Мне нужно отобразить около 5 столбцов из 2 таблиц базы данных с помощью предложения 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

Теперь COLUMN_B имеет одинаковое значение во всех строках, имеющих одинаковый COLUMN_A, а COLUMN_B представляет собой суммуполе.COLUMN_C является полем даты и будет одинаковым для тех же значений COLUMN_A.

Пример.Вот фиктивные данные TABLE 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
...

TABLE T2:

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

Выполнение запроса не работает со следующей ошибкой: ORA-00979: not a GROUP BY expression

Удаление COLUMN_B и COLUMN_Cдолжно сработать.Однако мне также нужны эти столбцы.

Может кто-нибудь предложить, пожалуйста, необходимые изменения?

Ответы [ 2 ]

3 голосов
/ 22 декабря 2011

Это должно работать

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 голос
/ 23 декабря 2011

Если значения COLUMN_B и COLUMN_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

Вы указали столбцы COLUMN_B и COLUMN_C в своем списке SELECT, поэтому Oracle необходимо будет указать их значение при GROUP ing BY COLUMN_A. Тем не мение. Oracle не знает, что эти столбцы постоянны при одинаковых значениях COLUMN_A, и вы получаете ошибку, потому что в общем случае нет способа вернуть значение для этих столбцов.

Добавление COLUMN_B и COLUMN_C к предложению GROUP BY не должно влиять на результаты запроса и позволит вам использовать их в вашем списке SELECT.

...