Du kan sammanställa med en CASE
uttryck, som bildar en grupp med id
om manager_id
vara noll, annars använder du manager_id
. Resten av logiken liknar det du redan har.
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;
En sidoanteckning:Jag använde en funktion i GROUP BY
klausul, som inte är ANSI-kompatibel och därför kanske inte körs överallt. För att åtgärda detta kan vi först undersöka din tabell för att generera effektiva chefsgrupper. Använd sedan mitt svar ovan mot detta mellanresultat.