«Каждое выражение GROUP BY должно содержать хотя бы один столбец, который не является внешней ссылкой» с «набором группировки» - PullRequest
0 голосов
/ 24 января 2020

У меня следующий запрос SQL, моя цель состояла в том, чтобы составить промежуточный итог и общую сумму, сгруппировав промежуточные итоги по продуктам, но моя проблема заключалась в том, что если бы я использовал только «group by», он должен был бы добавить все поля «выберите», и результат не будет желаемым. Поэтому я попытался использовать «набор группировки», но он выдает следующую ошибку

«Каждое выражение GROUP BY должно содержать хотя бы один столбец, который не является внешней ссылкой»

У кого-нибудь есть решение для вышеуказанной проблемы или возможность группировки только по продукту?

SELECT 
    p.id_product,
    p.name,
    dd.name ,
    isnull(p.internal code, '------'),
    {fn CONCAT(CAST(d.id_division AS varchar), {fn CONCAT(' - ', d.name)}) },
    sum(vs.value1),
    sum(p.value2),
    sum(p.value2 * vs.value1)
FROM product p
    LEFT JOIN division d on d.id_division  = p.id_division
    LEFT JOIN division2 dd on dd.id_product = p.id_product
    LEFT JOIN value_stockroom vs on vs.id_product = p.id_product and vs.id_division2 = dd.id_division2
GROUP BY
    GROUPING SETS((p.id_product, p.name), (dd.name), (p.internal_code), (d.id_division, d.name), NULL)
ORDER BY 
    p.name, p.id_product, d.name

Я новичок, используя предложение Grouping set

1 Ответ

0 голосов
/ 24 января 2020

NULL не допускается в GROUP BY, потому что это константа. Вы хотите пустые скобки:

GROUP BY GROUPING SETS( (p.id_product, p.name), 
                        (dd.name),
                        (p.internal_code),
                        (d.id_division, d.name),
                        ()
                      )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...