Veröffentlicht 24. Juni 201015 j Hallo, leider habe ich momentan Schwierigkeiten einen Query zu schreiben. Ich habe folgende Tabelle Tab1 ID Gebiet Marke Status 1 Nord A verkauft 2 Süd B verkauft 3 Nord B verkauft 4 Nord A offen 5 Süd B offen Nun will ich einen Query derm ir das Ergbenis liefert: Gebiet Marke Verkauft Offen Nord A 1 1 Nord B 1 0 Süd B 1 0 Ich hab shcon 1000 Query probiert und nie hat es funktioniert. select gebiet, marke, count(status) as AnzahlVerkauft from tab1 where status = 'verkauft' group by gebiet, marke, Diese Version funktioniert, allerdings nur für einen Status. In diesem Fall 'verkauft'. Wie ich jetzt noch die Spalte AnzahlOffen und andere hinzubekomme weiß ich nicht. Steh ich auf dem Schlauch oder ist die Aufgabe schwer? Gruß hyperion
24. Juni 201015 j Da Du das DBMS nicht nennst, kann man hier nicht gezielt eine Query angeben. Mache es mit Subselects oder einer Pivottabelle (Pivot Tabellen (Teil 1 - Einführung))
24. Juni 201015 j Es handelt sich um MSAccess. Mit dem Pivottabellenassisten habe ich es bereits probiert und bin leider gescheitert. Ein manueller AUfbau ist auch nciht möglich, da MSAccess kein Case unterstützt. Mit Subselects habe ich es auch versucht. Leider bekomme ich hier bei ANzahlVerkauft die richtigen Werte und bei AnzahlOffen die selben Werte wie bei AnzahlVerkauft -> falsch SELECT ssev.Gebiet, ssev.Marke, ssev.Niederlassung, Count(ssev.Status) AS AnzahlVerkauft, count(sso.status) as AnzahlOffen FROM (SELECT Projekte.Gebiet, Produkte.Marke, Vertriebspartner.Niederlassung, Projekte.Status AS Status FROM Vertriebspartner INNER JOIN (Produkte INNER JOIN Projekte ON Produkte.ModellID=Projekte.ModellID) ON Vertriebspartner.VertriebspartnerID=Projekte.VertriebspartnerID WHERE projekte.status = 'endverkauft' ) AS ssev, (SELECT Projekte.Gebiet, Produkte.Marke, Vertriebspartner.Niederlassung, Projekte.Status AS Status FROM Vertriebspartner INNER JOIN (Produkte INNER JOIN Projekte ON Produkte.ModellID=Projekte.ModellID) ON Vertriebspartner.VertriebspartnerID=Projekte.VertriebspartnerID WHERE projekte.status = 'offen' ) AS sso GROUP BY ssev.Gebiet, ssev.Marke, ssev.Niederlassung; Gruß hyperion
24. Juni 201015 j Nah, das is so einfach, da braucht man keine Subselects oder Pivot SELECT gebiet, marke, SUM(CASE WHEN verkauft = 'verkauft' THEN 1 ELSE 0 END) [verkauft], SUM(CASE WHEN verkauft ='offen' THEN 1 ELSE 0 END) [offen] FROM tabelle GROUP BY gebiet, marke Das wichtige dran is das Prinzip. Was den Access Dialekt angeht : iif(verkauft='verkauft',1,0), iif(verkauft='offen',1,0) Gruß Sven
24. Juni 201015 j Ich habe leider keine MS Systeme, somit kann ich es nicht testen. Ich denke das mit dem Pivot sollte schon das richtige sein. Baue doch das Statement erst für einen Wert auf, dann für den zweiten usw. Im Moment verstehe ich nicht, warum Du Joins brauchst, denn in Deinem ersten Post hattest Du die nicht erwähnt. Wenn Du die Joins brauchst, dann mache doch daraus einen View, den Du dann in Deiner Pivot Tabelle verwendest.
24. Juni 201015 j Hallo, ich habe es jetzt doch noch mit dem Pivotassistenten geschafft. Die Joins habe ich am Anfang nicht erwähnt, weil ich das erste Beispiel noch auf das wesentliche beschränken wollte. Und Danke für den TIpp mit dem iff, das kann ich bestimtm noch irgendwann brauchen. Gruß hyperion
25. Juni 201015 j Ehrlich gesagt, ich würd von den Wizards abraten, irgendwie tuts vielleicht, aber a) lernt ma nix bei, und das is in unserem Job immer wichtig, und trau ich den dingern nich
Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.