DB2 Как вы используете функцию SUM с Join - PullRequest
0 голосов
/ 12 декабря 2011

Информация о DB2: z / OS v9.1

Я пытаюсь создать запрос, который выбирает разные столбцы из разных таблиц и один из столбцов таблиц, мне нужна сумма.Например:

    SELECT A.column1, B.*, SUM(C.Colum3) as col3
    FROM schema.TableA A, schema.TableB B, schema.TableC C
    WHERE A.column2 = B.column2 AND A.column1 = C.column1 
    GROUP BY A.column1;

Запрос не работает.Я получаю сообщение об ошибке:

    COLUMN OR EXPRESSION IN THE SELECT LIST IS NOT VALID.

Я пробовал разные примеры запросов, как этот Как мне сложить группу сумм?SQL Server 2008

Он находится на сервере SQL, поэтому может быть, поэтому он не работает.Не много примеров для DB2.:(

1 Ответ

1 голос
/ 12 декабря 2011

Поскольку вы получите ту же ошибку в SQL Server, а также во всех других основных СУБД (исключая причуду MySQL здесь): у вас есть столбцы, которые не включены в предложение GROUP BY, или часть совокупности, поэтомусистема не знает, что с ними делать (MySQL возвращает случайную строку для этих столбцов, я думаю, что, вероятно, не то, что вы хотите).

Непонятно, из чего вы пытаетесь получить «сумму сумм», поскольку вы перечисляете только одну SUM().Предполагая, что TableC является единственной таблицей, которую нужно агрегировать, используйте выражение общей таблицы (CTE), например:

WITH Summed_TableC (column1, summedColumn) as (SELECT column1, SUM(column3)
                                               FROM TableC
                                               GROUP BY column1)
SELECT a.Column1, b.*, c.summedColumn
FROM schema.TableA as a
JOIN schema.TableB as b
ON b.column2 = a.column2
JOIN Summed_TableC as c
ON c.column1 = a.column1

О - никогда не используйте синтаксис неявного соединения.Вы точно определили, из каких таблиц и из каких столбцов происходят, но если нет, это просто сбивает с толку.Избегайте этого, явно JOIN используя таблицы и их столбцы.

...