Ich möchte nur die unterste Ebene des CTE auswählen/anzeigen. Bitte helfen Sie. Ich verwende SQL Server 2016.SQL Server CTE: So wählen Sie nur die niedrigste Ebene
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)
Ich muss nur Datensätze 3, 4, 6 anzeigen, die die niedrigste Ebene ist.
Update: Ich habe bereits die Abfrage erstellt, aber Datensatznummer 4 wurde nicht angezeigt. Ich erwarte, dass Datensatz Nummer 4 angezeigt wird, da der Datensatz die niedrigste Ebene in der Gruppe ist.
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
Würden Sie in Ihrer Abfrage/CTE bearbeiten, sowie Eingabedaten und erwartete Ergebnisse, damit die Leute das ein bisschen besser verstehen können? Ich bin mir nicht sicher, dass es klar ist, was Sie im Moment meinen. Wenn Sie zusätzlich eine SQL-Fiddle bereitstellen können, die am hilfreichsten wäre. – halfer