Du kan samle ved hjælp af en CASE udtryk, som danner en gruppe ved hjælp af id hvis manager_id være nul, ellers bruge manager_id . Resten af logikken ligner det, du allerede 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 sidebemærkning:Jeg brugte en funktion i GROUP BY klausul, som ikke er ANSI-kompatibel og derfor muligvis ikke kører overalt. For at løse dette kan vi først underforespørge din tabel for at generere de effektive managergrupper. Brug derefter mit svar ovenfor mod dette mellemresultat.
