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.