-1
CTEの最低レベルを選択/表示します。助けてください。私はSQL Server 2016を使用しています。SQL Server CTE:最低レベルのみを選択する方法
Create Table Location
(
Id int
Name varchar(20)
Parent int
)
Insert into location
values (1, Location1, null), (2, Location1child, 1),
(3, Location1grandchild, 2), (4, Location2, null),
(5, Location3, null), (6, Locationchild3, 5)
最低レベルのレコード3,4,6を表示する必要があります。
更新:すでにクエリを作成しましたが、レコード番号4は表示されませんでした。レコードがグループの最下位レベルであるため、レコード番号4が表示されることを期待しています。
With CTE (id, cte_level, cte_name, cte_longname) as
(
Select
A.ID, 1,
cast(A.name as varchar(max)),
cast(A.name as varchar(max))
from
Location A
Union All
Select
A.ID, cte_level + 1,
replicate(' · ' , cte_level) + cast(A.name as varchar(max)),
cte.cte_longname + ' . ' + cast(A.name as varchar(max))
from
Location A
inner join
CTE ON A.Parent = CTE.id
)
select
CTE_2.id,
CTE_2.cte_longname [name]
--, A.cte_name [name]
from
CTE as CTE_1
inner join
CTE as CTE_2 on CTE_1.id = cte_2.id
where
CTE_1.cte_level = 1
And CTE_2.cte_level = (Select MAX(CTE.cte_level) From CTE)
order by
cte_2.cte_longname
あなたのクエリ/ CTEに加えて、データと予想される結果を編集して、人々がこれを少し良く理解できるようにしますか?私はあなたが現在意味することがはっきりしているかどうかはわかりません。もしあなたがさらに役に立つSQLフィドルを提供できれば。 – halfer