試試這個:
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
是 - http://msdn.microsoft.com/en-us/library/ ms186243(v = sql.90).aspx – Yuck 2012-03-21 18:23:14
@Yuck - 是的我可以得到父子關係顯示得很好(我實際使用表變量代替CTE),但它得到的項目計數,我卡住。我可以讓他們達到最底層的水平 - 但這是我所能得到的。 – 2012-03-21 18:25:43