Fejlen du får fortæller dig, at kolonnen CategoryID i din WHERE klausulen er tvetydig, det betyder, at systemet har et problem med at identificere den relevante kolonne, fordi der er flere CategoryID kolonner.
For at løse dette problem skal du bruge aliaset til at angive, hvilken kolonne du vil bruge til din WHERE klausul:
SELECT cat2.CategoryID AS CategoryID
,cat2.Name AS CategoryName
,COUNT(p.ProductID) AS CountProducts
FROM Category AS cat
INNER JOIN Category AS cat2 ON cat2.ParrentCategoryID = cat.CategoryID
INNER JOIN Products AS p ON p.CategoryID = cat2.CategoryID
WHERE cat.CategoryID = '876'
GROUP BY cat2.CategoryID, cat2.Name
ORDER BY cat2.Name
Jeg ændrede også en smule forespørgslen for at få det samme resultat, men i stedet for at bruge en kombination af LEFT JOIN + IN klausul + underforespørgsel, jeg brugte INNER JOIN klausuler. Med denne forespørgsel behøver du kun at definere dit ønskede CategoryID én gang, og det vil automatisk få alle børnekategorier.
Jeg er ikke sikker på, at din forespørgsel kører korrekt, fordi du bruger COUNT funktion uden at gruppere resultaterne efter CategoryID ...
Håber dette vil hjælpe dig.