Vous pouvez simplement le faire dans SQL en utilisant des requêtes imbriquées. Supposons que vous avez les tables suivantes: Transaction, User, Device et Group. La table de transactions enregistre les transactions de l'utilisateur sur un périphérique et a un champ Montant à additionner. Un utilisateur appartient à un groupe.
Vous devez donc résumer le montant pour l'utilisateur, pour les groupes et pour les appareils utilisés dans un groupe qui vous donnera SQL qui ressemble à ceci:
SELECT G.Description AS [Group], D.Description AS Device, U.Description AS UserName, MAX(GT.GroupTotal) AS GroupTotal, MAX(GDT.GroupDeviceTotal) AS GroupDeviceTotal, SUM(T.Amount) AS UserTotal
FROM Transaction AS T
INNER JOIN User AS U ON L.UserId = F.UserId
INNER JOIN Group AS G ON G.GroupId = L.GroupId
INNER JOIN Device AS D ON T.DeviceId = L.DeviceId
INNER JOIN
(SELECT GroupId, SUM(Amount) AS GroupTotal
FROM Transaction
INNER JOIN User ON User.UserId = Transaction.UserId
WHERE (Transaction.TxDate >= '2011-01-01')
GROUP BY User.GroupId) AS GT ON GT.GroupId = U.GroupId
INNER JOIN
(SELECT GroupId, DeviceId, SUM(Amount) AS GroupDeviceTotal
FROM Transaction
INNER JOIN User ON User.UserId = Transaction.UserId
WHERE (TxDate >= '2011-01-01')
GROUP BY GroupId, DeviceId) AS GDT ON GDT.GroupId = U.GroupId AND GDT.DeviceId = T.DeviceId
WHERE (T.TxDate >= '2011-01-01')
GROUP BY G.GroupId, D.DeviceId, U.UserId
ORDER BY GroupTotal DESC, GroupDeviceTotal DESC, UserTotal DESC
Notez que la clause where vous utilisez doit être la même dans la requête principale et dans chaque requête imbriquée (c'est le bit "WHERE (T.TxDate> = '2011-01-01')").
Avez-vous essayé l'une des deux réponses pour voir si elles fonctionnent pour vous? –