SQL Count mit Subquery

jonesjunior

Lt. Commander
Registriert
Okt. 2008
Beiträge
1.699
Hallo,

ich sitze vor einem praktischen Problem und vielleicht habt ihr eine Idee. Kollege konnte mir auch nicht weiterhelfen.
Ich habe eine Tabelle, aus der ich folgendes abfragen möchte:

- Produktkategorie ID (1,2,3...1000)
- Name der Produktkategorie (z.B. Sechskantschraube, Zylinderkopfschraube...)
- ID der übergeordneten Kategorie inklusive NULL (0,1,2,3,4..) -> das wäre z.B. Schraube allgemein
- Anzahl der Subkategorien, die eine übergeordnete Kategorie hat inkl. 0. (also wenn es 3 verschiedene Schraubenarten gibt zu einer übergeordneten ID, dann soll da eine 3 stehen)

Code:
	SELECT 
	ProduktKategorieID,
	Name,
	ParentProduktKategorieID,

	(SELECT COUNT(ParentProduktKategoryID)
	FROM ProduktKategorie	
	WHERE ProduktKategorieID = ParentProduktKategorieID)	
	
         FROM ProduktKategorie
	GROUP BY ParentProduktKategorieID, Name, ProduktKategorieID

Die ersten drei Spalten sind ja nur einfache Abfragen, aber das Zählen der Unterkategorien macht mir Probleme. Ich habe euch mal meinen bisherigen Stand reingestellt, da bekomme ich in der letzten Spalte leider nur NULL.

Falls ich
LEFT OUTER JOIN ProduktKategorie ON ProduktKategorieID = ParentProduktKategorieID)

in die SubQuery einbaue, habe ich in der vierten Spalte in jeder Zeile 120 stehen, was der Gesamtanzahl der Subkategorien entspricht. Ich möchte es aber aufgeschlüsselt nach jeder einzelnen Kategorie..

Danke euch im Voraus.
 
Zuletzt bearbeitet:
Ist schon spät und ich kann völlig auf dem Holzweg sein ;), aber spontan hätte ich gesagt, du solltest den Tabellen Aliase geben, um den Join in der Subquery eindeutig zu machen. Ich vermute mal, dass die DB (bzw. deren Parser) die gesamte Subquery "in sich" ausführt, also die Join-Condition beidesmal auf dieselbe Tabelle ProduktKategorie (die der Subquery) bezieht - und wenn kein Produkt sein eigener Vater ist, dann ist die Bedingung nie erfüllt. Soll sie ja aber wohl auch nicht sein, sondern mit derselben Tabelle der Hauptabfrage verknüpft werden, ungefähr so:

Code:
	SELECT 
	a.ProduktKategorieID,
	a.Name,
	a.ParentProduktKategorieID,

	(SELECT COUNT(b.ParentProduktKategoryID)
	FROM ProduktKategorie b
	WHERE a.ProduktKategorieID = b.ParentProduktKategorieID)	
	
        FROM ProduktKategorie a

hätte ich gesagt - sofern ich deine Anforderung richtig verstanden habe.

Die group by clause kann übrigens weg, da die Subquery ja genau einen Wert je Spalte liefert bzw. Du keine Aggregatsfunktionen im Select hast.
 
Das hat gepasst, vielen Dank Veddem! :)
 
Zurück
Oben