Pages

Friday 11 January 2013

Counting number of children in hierarchical SQL data

DECLARE @Data TABLE (
  ID INTEGER PRIMARY KEY
  , ParentID INTEGER
  , Text VARCHAR(32)
  , Price INTEGER
)

INSERT INTO @Data
  SELECT 1, Null, 'Root', NULL
  UNION ALL SELECT 2, 1, 'Flowers', NULL
  UNION ALL SELECT 3, 1, 'Electro', NULL
  UNION ALL SELECT 4, 2, 'Rose', 10
  UNION ALL SELECT 5, 2, 'Violet', 5
  UNION ALL SELECT 6, 4, 'Red Rose', 12
  UNION ALL SELECT 7, 3, 'Television', 100
  UNION ALL SELECT 8, 3, 'Radio', 70
  UNION ALL SELECT 9, 8, 'Webradio', 90
 
;WITH ChildrenCTE AS (
SELECT  RootID = ID, ID
FROM    @Data
UNION ALL
SELECT  cte.RootID, d.ID
FROM    ChildrenCTE cte
      INNER JOIN @Data d ON d.ParentID = cte.ID
)
SELECT  d.ID, d.ParentID, d.Text, d.Price, cnt.Children
FROM    @Data d
    INNER JOIN (
      SELECT  ID = RootID, Children = COUNT(*) - 1
      FROM    ChildrenCTE
      GROUP BY RootID
    ) cnt ON cnt.ID = d.ID


1    NULL    Root    NULL    8
2    1    Flowers    NULL    3
3    1    Electro    NULL    3
4    2    Rose    10    1
5    2    Violet    5    0
6    4    Red Rose    12    0
7    3    Television    100    0
8    3    Radio    70    1
9    8    Webradio    90    0

No comments:

Post a Comment