Vous pouvez agréger à l'aide d'un CASE
expression, qui forme un groupe en utilisant le id
si le manager_id
soit zéro, sinon en utilisant le manager_id
. Le reste de la logique est similaire à ce que vous avez déjà.
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;
Une remarque :j'ai utilisé une fonction dans le GROUP BY
clause, qui n'est pas conforme à la norme ANSI et peut donc ne pas s'exécuter partout. Pour résoudre ce problème, nous pouvons d'abord effectuer une sous-interrogation de votre table pour générer les groupes de responsables effectifs. Ensuite, utilisez ma réponse ci-dessus contre ce résultat intermédiaire.