私は階層構造を持つtodoリストを構築しています。それに良いロジックを探していて、それが隣接リストにあることが分かりました。隣接リストとしての階層的ToDoList
ゴールは、階層的なタスクを持つ予定リストを実行できるようにすることです(1つのタスクがルートであり、ノードを持つことができます。ノードには独自のノードなどがあります)。
そして私は私のすべての根を示してクエリをしたい、といくつかのルートノードを持っている場合は、そのようにそれを示していますテーブル
CREATE TABLE [dbo].[Tasks](
[Id] [int] IDENTITY(1,1) NOT NULL,
[Name] [nvarchar](max) NOT NULL,
[Owner] [nvarchar](max) NOT NULL,
[Parent] [int] NULL,
データを挿入した後、テーブルは次のようになりますよく
私のクエリは
SELECT t.*, COUNT(tr.Parent) as SubCount
FROM Tasks t
INNER JOIN Tasks tr on t.Id = tr.Parent
GROUP BY t.Name, t.Owner, t.Id, t.Parent
UNION
SELECT t.*, 0 as SubCount
FROM Tasks t
where Parent IS NULL;
ですが、結果は次のとおりです。
期待される結果は、親との行のみを表示する必要があります例えば、NULLとサブ・ノードを持つ行です。
どのようなショーuldはここで正しいクエリでしょうか?
うんが@Hebeleが(ちょうど私がCOUNTを変更(1)私を与えるために)(同上をカウントするために素晴らしい:)のおかげで動作しますより正確な答え) – eyalewin