2017-06-11 8 views
0

私は以下の構造のテーブルを1つ持っています。私はここでユニットIDの下の例の児童数で、子ども単位のカウントで、すべてのユニットの詳細情報を取得したい-6 2とユニットID 5は、(NULL SINCE)0ですのSQL Server 2008カウントする方法階層型SQL-SQL Serverの親の子の子の名前

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 

答えて

0

基本的には、 `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 

ノエル

+0

ではなく、クエリ内のハードコーディング値の他の方法がありますが、私は1000年ノーを持っています。レコードの。 – Rocky

+0

私は単に例として#Tempに挿入していました。 2番目のクエリは#Tempのテーブルを代用するだけで使用できます。 – nscheaffer

関連する問題