![]() |
Datenbank: MySQL • Version: 5 • Zugriff über: UniDac
Select mit widersprüchlichen where-Anweisungen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Zusammen,
ich habe eine Abfrage zu generieren, in der ich Daten nach unterschiedlichen, sich zum Teil widersprechenden Bedingungen zusammenfassen muss. Hier mal ein aller erster Ansatz meine Abfrage:
Delphi-Quellcode:
In dem angefügten Screenshot könnt Ihr sehen, wie die Tabelle nachher aussehen soll.
select hlp_branchen.branche_text as Branchen, Count(anfrage_id) as Auftrag from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche where feedback=10 and branche=1
union select hlp_branchen.branche_text as Branchen, Count(anfrage_id) as Auftrag from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche where feedback=10 and branche=2 union select hlp_branchen.branche_text as Branchen, Count(anfrage_id) as Auftrag from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche where feedback=10 and branche=3 Mein Problem ist, dass sich die where-Bedingungen widersprechen. In der zweiten Spalte "Anzahl Anfragen" möchte ich die Anzahl alle Anfrage dieser Branchen haben- in der nächsten Splate nur die Anfragen dieser Branche, wo wir den Auftrag erhalten haben (Feedback=10) - dann die Anzahl der Anfragen, wo wir zu teuer waren (Feedback=9)... Ich nehme mal an, dass ich irgendwie mit Indixen arbeiten muss, habe nur keine Vorstellung, wie ich das anstellen soll... Das zweite Problem ist, dass in der Tabelle (Screenshot) die Branche mit "NULL" angegeben wird, weil die Bedingung (Feedback=10) nicht erfüllt ist. Ich möchte aber, dass dann da trotzdem "OEM" drinsteht. Ich hoffe, ich konnte die Probleme verständlich erklären und das Ihr mir helfen könnt. Vielen Dank Patrick |
AW: Select mit widersprüchlichen where-Anweisungen
Liste der Anhänge anzeigen (Anzahl: 1)
Sorry, ich glaube, dass ich es gerade mit der Hilfe aus einem Threat zu einem ähnlichen Thema selbst gelöst habe.
Ist diese Lösung für die Experten nachvollziehbar?
Delphi-Quellcode:
Vielen Dank
select hlp_branchen.branche_text as Branchen, Count(A2.anfrage_ID) as 'Anzahl Anfragen der Branche',
Count(A0.anfrage_id) as 'Anzahl Aufträge der Branche', Count(A4.anfrage_ID) as 'zu teuer der Branche', Count(A1.anfrage_id) as 'kein Feedback der Branche' from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche left join anfragen as A0 on A0.anfrage_ID=anfragen.anfrage_id and A0.Feedback=10 left join anfragen as A4 on A4.anfrage_ID=anfragen.anfrage_id and A4.Feedback=9 left join anfragen as A1 on A1.anfrage_ID=anfragen.anfrage_id and A1.Feedback is null left join anfragen as A2 on A2.anfrage_ID=anfragen.anfrage_id where anfragen.branche=1 union select hlp_branchen.branche_text as Branchen, Count(A2.anfrage_ID) as 'Anzahl Anfragen der Branche', Count(A0.anfrage_id) as 'Anzahl Aufträge der Branche', Count(A4.anfrage_ID) as 'zu teuer der Branche', Count(A1.anfrage_id) as 'kein Feedback der Branche' from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche left join anfragen as A0 on A0.anfrage_ID=anfragen.anfrage_id and A0.Feedback=10 left join anfragen as A4 on A4.anfrage_ID=anfragen.anfrage_id and A4.Feedback=9 left join anfragen as A1 on A1.anfrage_ID=anfragen.anfrage_id and A1.Feedback is null left join anfragen as A2 on A2.anfrage_ID=anfragen.anfrage_id where anfragen.branche=2 union select hlp_branchen.branche_text as Branchen, Count(A2.anfrage_ID) as 'Anzahl Anfragen der Branche', Count(A0.anfrage_id) as 'Anzahl Aufträge der Branche', Count(A4.anfrage_ID) as 'zu teuer der Branche', Count(A1.anfrage_id) as 'kein Feedback der Branche' from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche left join anfragen as A0 on A0.anfrage_ID=anfragen.anfrage_id and A0.Feedback=10 left join anfragen as A4 on A4.anfrage_ID=anfragen.anfrage_id and A4.Feedback=9 left join anfragen as A1 on A1.anfrage_ID=anfragen.anfrage_id and A1.Feedback is null left join anfragen as A2 on A2.anfrage_ID=anfragen.anfrage_id where anfragen.branche=3 Patrick |
AW: Select mit widersprüchlichen where-Anweisungen
Also so wie ich das sehe solltest du einen
SQL-Code:
ausführen.
GROUP BY branche
Etwa so:
SQL-Code:
Jetzt hast du die Branche zwar nur als Zahlenwert, aber das ist kein Problem, denn man kann den Text aus Tabelle "hlp_branchen" rausholen:
SELECT branche, Count(*) as Anzahl from anfragen
WHERE feedback = 10 GROUP BY branche
SQL-Code:
Die Abfrage in den runden Klammern wie zu "SubTbl" umbenannt, damit man entsprechend verjoinen kann.
SELECT SubTbl.*, hlp_branchen.branche_text as Branchen FROM
( SELECT branche, Count(*) as Anzahl from anfragen WHERE feedback = 10 GROUP BY branche) SubTbl INNER JOIN hlp_branchen ON SubTbl.branche=hlp_branchen.branchen_id |
AW: Select mit widersprüchlichen where-Anweisungen
vermutlich meinst Du sowas in dieser Art:
Code:
Du benötigst hierfür also im Ergebnis zuerst mehr Spalten, als Du im Ergebnis eigentlich ermitteln kannst. Zuerst holst Du daher die Daten für die erste Spalte und füllst die übrigen Spalten mit 0.
select Branche, Sum(Feedback_10) as Feedback_10, Sum(Feedback_9) as Feedback_10 from (
select hlp_branchen.branche_text as Branchen, Count(anfrage_id) as Feedback_10, 0 as Feedback_9 from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche where feedback=10 and branche in (1,2,3) union select hlp_branchen.branche_text as Branchen, 0 as Feedback_10, Count(anfrage_id) as Feedback_9 from anfragen left join hlp_branchen on hlp_branchen.branchen_id=anfragen.branche where feedback=9 and branche in (1,2,3) ) group by Branche Dann holst Du das Ergebnis für die zweite Spalte und füllst die übrigen Spalten mit 0. Dies kannst Du für beliebig viele Spalten machen. Die einzelnen Ergebnisse werden mit Union zusammengefügt. Über diese mit Union zusammengefügten Ergebnismengen legst Du nun ein weiteres Select-Statement, das Dir die Spalten der Einzelergebnisse zusammenfasst. Dies kannst Du wahlweise mit Max oder Sum erledigen, da Du bei den Einzelergebnissen für jede Kombination aus Branche und Feedback ja nur einen Wert hast und der Rest mit 0 gefüllt wurde. Das Ergebnis musst Du dann bein Summieren nur (per Group by) auf Branche gruppieren. Danach solltest Du für jede Branche die gewünschten Werte nebeneinander in der Tabelle vorfinden. Wenn ich das richtig sehe, dürfte Deine Lösung auch zum gewünschten Ergebnis führen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz