U kunt aggregeren met behulp van een CASE
expressie, die een groep vormt met behulp van de id
als de manager_id
nul zijn, anders gebruik je de manager_id
. De rest van de logica is vergelijkbaar met wat je al hebt.
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;
Een kanttekening:ik gebruikte een functie in de GROUP BY
clausule, die niet ANSI-compatibel is en daarom mogelijk niet overal wordt uitgevoerd. Om dit op te lossen, kunnen we eerst een subquery uitvoeren op uw tabel om de effectieve managergroepen te genereren. Gebruik dan mijn bovenstaande antwoord tegen dit tussenresultaat.