Ich habe 2 Tabellen, ein für Ticketcategories sind:Ersten Zählungen von Kindern in einer Beziehung
CAT_PK, CAT_FK, CAT_Name
Wo CAT_FK
Punkte in einer anderen Kategorie in der Tabelle, die als übergeordnete Kategorie wirkt, und null ist, sind die Kategorie hat keine Eltern.
und Tickets:
TIC_PK,CAT_FK
Wo CAT_FK verweist auf die Kategorie, die Ticket unter fällt. Ein Ticket kann nur eine Kategorie haben.
Die Anzahl der Tickets für jede Kategorie zu ermitteln, ist einfach, aber ich muss eine Anzahl von Tickets für eine Kategorie abrufen, einschließlich aller Tickets, die zu Kindern dieser Kategorie gehören.
Wenn also ein hierchy wie diese vorhanden ist:
Stuff
>Blue Stuff
>Red Stuff
>Yellow Stuff
>Yellow Spotted Stuff
eine Anzahl von Tickets von Stuff bekommen beinhaltet auch Tickets unter allen untergeordneten Kategorien in der Zählung.
Ich habe mit rekursiven CTE ist als Lösung rumgespielt, aber ich bin nicht sicher, ob es wegen der Art der Zählungen und Gruppen, die fähig ist:
With
TicketCTE (count,CAT_PK,CAT_FK_Parent, CAT_Description)
as
(
Select Count(*) as count,CAT_PK,CAT_FK_Parent, CAT_Description
from Tickets
JOIN TicketCategories
ON TIC_CAT_FK = CAT_PK
GROUP BY CAT_PK,CAT_FK_Parent,CAT_Description
union all
Select Count(*) as count,TicketCategories.CAT_PK,TicketCategories.CAT_FK_Parent, TicketCategories.CAT_Description
from Tickets
join TicketCategories
on TIC_CAT_FK = TicketCategories.CAT_PK
join TicketCTE
on TicketCategories.CAT_PK = TicketCTE.CAT_PK
GROUP BY TicketCategories.CAT_PK,TicketCategories.CAT_FK_Parent,TicketCategories.CAT_Description
)
Select TicketCTE.*
from TicketCTE
left join TicketCTE MgrCTE
on TicketCTE.CAT_FK_Parent = MgrCTE.CAT_PK
Nicht sicher, ob dies überhaupt möglich ist, weil des Fehlers I erhalten,
GROUP BY, Atomen oder Aggregatfunktionen sind nicht in den rekursiven Teil des rekursiven allgemeinen Tabellen Ausdrücke erlaubt
Das wirklich nahe ist, was ich versuche zu tun! Problem Ist es nicht inklusive, wenn ich versuche einzuschränken, wonach ich suche. sagen, dass ich eine Zählung der Kategorie will 5, die 1 Kategorie gehören würde, 2 und 3 (alle Kinder der Kategorie 5) Wenn ich ändern WHERE CAT_FK auf NULL: WHERE CAT_FK = 5 Dann bekomme ich eine Zählung jeder Kindkategorie, aber nicht Kategorie 5 ist es selbst – SpeedOfRound
Gern, wenn ich es zu CAT_PK = 5 ändere, es funktioniert stattdessen! Wow, vielen Dank @DhruvJoshi – SpeedOfRound