我在下面的结构中有一个表。我想获取带有子单元计数的所有单元详细信息,在下面的示例中,在 SQL SERVER 2008 中,单元 ID -6 的子计数为 2,单元 ID 5 为 0(因为为空(
UnitID | Name | ParentUnitId
++++++++++++++++++++++++++++
1 | Unit A | NULL
2 | Unit B | 1
3 | Unit C | NULL
4 | Unit D | 1
5 | Unit E | NULL
6 | Unit F | 3
7 | Unit G | 3
基本上,
您只需要获取具有"ParentUnitId"值的记录数,然后将连接从主表左转至该子查询。像这样的东西...
IF OBJECT_ID('tempdb..#Temp', 'U') IS NOT NULL DROP TABLE #Temp;
SELECT
*
INTO #Temp
FROM
( VALUES
( 1, 'Unit A', NULL),
( 2, 'Unit B', 1),
( 3, 'Unit C', NULL),
( 4, 'Unit D', 1),
( 5, 'Unit E', NULL),
( 6, 'Unit F', 3),
( 7, 'Unit G', 3)
) AS t ([UnitID], [Name], [ParentUnitID])
SELECT a.*, COALESCE(b.ChildCount, 0) AS 'ChildCount' FROM #Temp a
LEFT JOIN
(
SELECT ParentUnitID, COUNT(*) AS 'ChildCount' FROM #Temp
WHERE ParentUnitID IS NOT null
GROUP BY ParentUnitID
) b ON a.UnitID = b.ParentUnitID
圣诞颂歌