Bonjour,

Je me demandais si il était possible de faire une requête récursive avec des agrégats.
Je m'explique; prenons les tables suivantes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
CREATE TABLE [dbo].[Category](
	[Id] [int] NOT NULL,
	[Name] [varchar](255) NOT NULL,
	[ParentId] [int] NULL,
	[IsFinal] [bit] NOT NULL
)
CREATE TABLE [dbo].[CategoryAsset](
	[CategoryId] [int] NOT NULL,
	[AssetId] [int] NOT NULL
)
CREATE TABLE [dbo].[Asset](
	[Id] [int] NOT NULL
)
Grâce au CTE (Common Table Expression), j'arrive a obtenir la notion de niveau pour mes catégories.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
WITH Categories(Id, Name, ParentId, Level) AS 
(
    SELECT Id, Name, ParentId, 0 as Level
    FROM Category
    WHERE ParentId IS NULL
    UNION ALL
    SELECT c.Id, c.Name, c.ParentId, cte.Level + 1
    FROM Category AS c
        INNER JOIN Categories AS cte
        ON c.ParentId = cte.Id 
)
SELECT Id, Name, ParentId, Level
FROM Categories
ORDER BY Level;
GO
Maintenant je voudrais obtenir la même requête avec une colonne me donnant le nombre d'Assets rattachés à chacune des catégories via la table CategoryAsset.

NB : Les lignes présentes dans la table de référence CategoryAsset ne font référence uniquement au enregistrements de Category ayant IsFinal=1 (Marqueur indiquant que la catégorie n'est parente d'aucune catégorie)
NB2 : Il faut que la la somme des assets pour une categorie soit la somme des sommes d'assets des sous catégories du niveau (n-1)...

Merci d'avance et bonne journée à tous!