Puoi aggregare utilizzando un CASE
espressione, che forma un gruppo utilizzando l'id
se il manager_id
essere zero, altrimenti utilizzando il manager_id
. Il resto della logica è simile a quella che hai già.
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;
Una nota a margine:ho usato una funzione in GROUP BY
clausola, che non è conforme all'ANSI e quindi potrebbe non essere eseguita ovunque. Per risolvere questo problema, possiamo prima eseguire una sottoquery della tabella per generare i gruppi di gestori efficaci. Quindi, usa la mia risposta sopra contro questo risultato intermedio.