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 :
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 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 )
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.
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
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!
Partager