Você pode agregar usando um
CASE
expressão, que forma um grupo usando o id
se o manager_id
ser zero, caso contrário, use o manager_id
. O resto da lógica é semelhante ao que você já tem. SELECT
CASE WHEN manager_id = 0 THEN id ELSE manager_id END AS manager_id,
MAX(CASE WHEN is_manager=1 THEN name END) AS name,
SUM(no_of_items) AS total_items,
SUM(revenue) AS total_revenue
FROM items_revenue
GROUP BY
CASE WHEN manager_id = 0 THEN id ELSE manager_id END;
Demonstração
Uma nota lateral:usei uma função no
GROUP BY
cláusula, que não é compatível com ANSI e, portanto, pode não ser executada em todos os lugares. Para corrigir isso, podemos primeiro consultar sua tabela para gerar os grupos de gerenciadores efetivos. Então, use minha resposta acima contra esse resultado intermediário.