親の関係を持つツリー内のノードを識別するためのクエリがあります。このクエリで何が問題になっていますか?内部ノードがあっても、対応するcase文は決して実行されません。常にリーフノードまたはルートノードとして結果が得られます。アウトプットでインナーを決してしないでください。私はおそらく何が間違っているのでしょうか?SQL CASEステートメント固有の例
WITH CTE(N, P, [Level]) AS ( SELECT N, P, 1 FROM BST B WHERE P IS NULL UNION ALL SELECT B.N, B.P, [Level] + 1 FROM BST B JOIN CTE ON B.P = CTE.N ) SELECT N, CASE WHEN [Level] = 1 Then 'Root' WHEN [Level] < MAX([Level]) AND [Level] > 1 THEN 'Inner' WHEN [Level] = MAX([Level]) THEN 'Leaf' END FROM CTE GROUP BY N, [Level] ORDER BY N ASC;
サンプル入力
N P
1 2
3 2
6 8
9 8
2 5
8 5
5 NULL
サンプル出力
1 Leaf
2 Inner
3 Leaf
5 Root
6 Leaf
8 Inner
9 Leaf
ですか –