Попробуйте это:
DECLARE @Region TABLE
(
Region_id int,
Parent_id int,
Region_name varchar(50)
)
DECLARE @RegionStore TABLE
(
Region_id int,
Store_id int
)
DECLARE @StoreItems TABLE
(
Store_id int,
Item_id int
)
INSERT @Region
SELECT 2, NULL, '2' UNION ALL
SELECT 67, 2, '67' UNION ALL
SELECT 130, 67, '130' UNION ALL
SELECT 255, 130, '255' UNION ALL
SELECT 1, NULL, '1' UNION ALL
SELECT 68, 2, '68'
-- add more test data here
;WITH CTE AS (
SELECT
Region_id,
Parent_id,
Region_name,
Region_id AS Region_id_calc
FROM @Region
UNION ALL
SELECT
r.Region_id,
r.Parent_id,
r.Region_name,
CTE.Region_id_calc AS Region_id_calc
FROM CTE
INNER JOIN @Region AS r
ON r.Region_id = CTE.Parent_id
)
SELECT
CTE.Region_id,
Region_name,
COUNT(DISTINCT Item_Id)
FROM CTE
INNER JOIN @RegionStore AS s
ON CTE.Region_id_calc = s.Region_id
INNER JOIN @StoreItems AS i
ON s.Store_id = i.Store_id
GROUP BY
CTE.Region_id,
Region_name
ORDER BY
CTE.Region_id