5.4k Aufrufe
Gefragt in Datenbanken von
Hallo, vielleicht kann mir jemand hier helfen =)

wahrscheinlich ist es ein ganz einfaches problem, aber alle meine ansätze bringen irgendwie nur mangelhafte ergebnisse...

ich habe eine tabelle mit Kundendaten und Kundenherkunft. Darin sind 1700 unterschiedliche Herkünfte eingetragen (omg) also z.b. blabla Zeitung 1, Internet, Blabla Zeitung 2 usw.... also worüber der erste Kontakt hergestellt wurde bzw. der Kunde Kenntnis von dem Produkt erhalten hat.

ich möchte:
diese ergebnisse gruppieren (alle Zeitungen zusammen etc)
und dann ausgeben. Einzige Möglichkeit die ich selbt hinkriege ist pro einzelnem Parameter (Also eine "Zählabfrage" für alles mit Zeitung z.B., gibt dann ein Feld aus mit dem Wert)
Geht das nicht auch einfacher/kompakter?
Also z.B. wie
SELECT Count(t_kunde.kun_id) AS Anzahlvonkun_id
FROM t_kunde
GROUP BY t_kunde.kun_herkunft
HAVING (((t_kunden.kun_herkunft) Like "*Zeitung*"));

aber dass er mir dann halt nicht alle unterschiedlichen Zeitungen auflistet sondern das automatisch gruppiert?
Und das ganze dann auch noch für alle gruppierungen in einer Abfrage? Das wird doch sicherlich möglich sein.

Ich will dann später mit dieser Abfrage weiterarbeiten in dem Sinne, wer von diesen Kunden das Produkt dann auch gekauft hat (via Tabelle Bestellungen)

Hab wirklich versucht mich schlau zu lesen aber das hat leider nichts gebracht ;) Für Hilfe wäre ich sehr dankbar!

19 Antworten

0 Punkte
Beantwortet von Experte (6.4k Punkte)
Hi,
Deine Frage aus A9 verstehe ich nicht ganz.

Wenn Du es so machst wie in A8, dann musst Du die Statements eben so ausformulieren, dass alle Herkünfte abgedeckt werden.

Eigentlich wäre es glaube ich sogar besser, wenn Du eine eigene Tabelle Herkunft hättest mit den Spalten ID, Herkunft, Kategorie. Id wäre dann der Primary key, unter Herkunft sind die verschiedenen Quellen eingetragen und bei Kategorie würde dann jeweils Zeitung, Internet etc drin stehen.

Dann würde in Deiner Kundentabelle unter Herkunft die ID aus der Tabelle Herkunft stehen. Wenn sich dann der Name einer Zeitung oder einer anderen Quelle ändert, dann müsstest Du nur den jeweiligen Eintrag in der Herkunftstabelle ändern und nicht die ganze Kundentabelle ändern/updaten.
0 Punkte
Beantwortet von
Eigentlich wäre es glaube ich sogar besser, wenn Du eine eigene Tabelle Herkunft hättest mit den Spalten ID, Herkunft, Kategorie. Id wäre dann der Primary key, unter Herkunft sind die verschiedenen Quellen eingetragen und bei Kategorie würde dann jeweils Zeitung, Internet etc drin stehen.

Dann würde in Deiner Kundentabelle unter Herkunft die ID aus der Tabelle Herkunft stehen. Wenn sich dann der Name einer Zeitung oder einer anderen Quelle ändert, dann müsstest Du nur den jeweiligen Eintrag in der Herkunftstabelle ändern und nicht die ganze Kundentabelle ändern/updaten.
Damit hast du sicherlich recht, aber ich kann nicht auf diese Weise in die gegebene Tabelle eingreifen. (mir liegt nur ein Access-Export vor, letztendlich werden die Daten in ein andere dbms eingetragen auf dass ich keinen zugriff habe)

vielleicht noch einmal ganz kurz und knapp: ich möchte auswerten, wieviel kunden aus welchem bereich "kommen", dabei ist es natürlich schwachsinnig 1700 herkünfte zu haben, deswegen wollte ich das ganze ein bißchen kategorisieren, d.h. dass die von Hand eingebenen herkünfte eingeteilt werden in die einzelnen oberbereiche.
würd das halt gern irgendwie anlegen für einen großteil, damit man diese abfrage später auch mal wieder ausführen kann. alles was nicht reinpasst (also auch später neu hinzugefügte Eingaben für die nix definiert war) kommt dann halt in einen Bereich "andere" oder so, das wäre nicht so schlimm

mein ansatz oben scheint irgendwie auch nur bei zwei If bedingungen zu funktionieren, bei der dritten krieg ich ne fehlermeldung.

ich kann natürlich jetzt das ganze auch einfach von hand eintragen einmal und dann zählen wenn es so doch viel komplizierter ist...
0 Punkte
Beantwortet von
mein ansatz oben scheint irgendwie auch nur bei zwei If bedingungen zu funktionieren, bei der dritten krieg ich ne fehlermeldung.
omg hatte nur ne klammer vergessen...
0 Punkte
Beantwortet von Experte (6.4k Punkte)
mit

select count(*) from t_kunde where HID=1;

könntest Du zählen, wieviele Kunden es gibt, deren Herkunft 1 (=zB Zeitungen) ist...
0 Punkte
Beantwortet von
ich weiß.
mein problem ist einfach momentan wie ich jetzt erstmal die 1 zuweise. mein ansatz oben funktioniert doch nicht, weil man anscheinend nicht unbegrenzt viele IF... kombinieren kann.

wie gesagt, ich kann es nicht ändern dass diese werte da nunmal so drin stehen (x verschiedene Zeitungen) ich will es nur auswerten und es dafür irgendwie kategorisieren und das - wenn möglich nicht ganz von hand
0 Punkte
Beantwortet von Experte (6.4k Punkte)
Also ich bin auch nur DB-Anfänger bzw allenfalls fortgeschrittener Anfänger. Ausserdem benutze ich Access nicht, sondern frage direkt über den MySql-Server an der Konsole ab.

Durch Deine Aussagen weiss ich jetzt nicht genau, ob Du z.B. die Spalte HID hinzufügen darfst oder sie hinzugefügt hast oder nicht.
Falls Du sie hinzugefügt hast, würde mir momentan nichts besseres einfallen, als für jede einzelne HID ( = Kategorie) ein entsprechendes UPDATE-Statement zu formulieren, dass möglichst viele Herkunftsarten abdeckt.
Da ich die jeweiligen Einträge in Herkunft nicht kenne, ist es nicht einfach Dir ein garantiert funktionierendes Statement zu geben.
Ich würde es also für HID 1 (Zeitungen) so machen:

UPDATE t_kunde SET HID=1 WHERE kun_herkunft='FAZ' or kun_herkunft LIKE '%zeitung%' or kun_herkunft LIKE '%blatt' ; ... (<- nach Bedarf erweitern)

Damit würden schonmal alle Einträge mit "FAZ", alle Einträge mit "zeitung" und alle Einträge die auf "blatt" enden (also Tagblatt, Abendblatt etc) auf 1 in HID gesetzt werden. Dieses Update-Statement könntest Du jetzt so erweitern, dass möglichst viele Zeitungen upgedatet werden. Den Rest könnte man dann vielleicht per Hand updaten.

Dann würde ich das Update-Statement für HID=2 (=Internet) anwenden, usw.

Ich hätte zwar noch andere Ideen, aber ich weiss nicht ob die funktionieren und falls doch wie, und ob das für Dich aufgrund Deiner DB-Struktur überhaupt anwendbar wären.

Wenn Du die Spalte HID nicht einfügen darfst/kannst, dann kannst Du Dir vielleicht eigene Tabellen erstellen, die eine Verbindung zur Original-DB aufnimmt, die Einträge einliest und die Du dann entsprechend für Deine Auswertungszwecke nutzen kannst.

mfg, sup[sup]2010[/sup]
0 Punkte
Beantwortet von rahi Experte (1.5k Punkte)
Hallo Shafty,

hier eine Billigvariante ohne eine Änderung an deinen Daten, falls du wirklich so Herkünfte wie Zeitung 1, Zeitung 2 usw gruppieren willst. Ich gehe dabei von Namensgleichheit bis zum ersten Leerzeichen aus:

SELECT Sum(t_kunde.Kunde_id) AS SummevonKunde_id, Left([Kun_herkunft],IIf(InStr([Kun_Herkunft]," ")>0,InStr([Kun_Herkunft]," "),999)) AS Ausdr1
FROM t_kunde
GROUP BY Left([Kun_herkunft],IIf(InStr([Kun_Herkunft]," ")>0,InStr([Kun_Herkunft]," "),999));

Das liefert dir dein Ergebnis aus A2. Der andere Ansatz von supporter2010 geht in die richtige Richung. Die Anzahl der Herkünfte wird ja nicht 20.000 betragen. Wenn dies übersichtlich ist, erstellst du dir eine weitere Tabelle "Herkunft" mit den Feldern Herkunft (text) und Gruppe (text) und fügst alle Herkunftsbezeichnungen ein und ordnest die Gruppedefinitonen zu (z.B. "Zeitung", "Internet). Dann kommst du mit der Abfrage:

SELECT Sum(t_kunde.Kunde_id) AS SummevonKunde_id, Herkunft.Gruppe
FROM Herkunft RIGHT JOIN t_kunde ON Herkunft.Herkunft = t_kunde.Kun_herkunft
GROUP BY Herkunft.Gruppe;

weiter. Hast du Herkunftsbezeichnungen vergessen, werden diese auch summiert, jedoch ohne Gruppenbezeichnung (right join).
Warum du allerdings die IDs summierst, statt zählst, muss du mir mal erklären.

Gruß
Ralf
0 Punkte
Beantwortet von
Danke für die Antworten.
Auch deine Antwort Rahi traf es leider nicht ganz: Dadurch dass jeder in das Feld irgendetwas eingeben konnte, gab es keine "regeln" wie der Inhalt aufgebaut ist.... allein schon weil z.B. der eine "FR" schreibt, der andere "Frankfurter Rundschau" etc.... alle Möglichkeiten dass irgendwie automatisiert zu kategorisieren stieß irgendwann an seine grenzen. Nur mit sql ist das wohl nicht machbar.
Ich hab mir jetzt letztendlich die Mühe gemacht allen einzelnen Werten eine Kategorie zuzuweisen, und diese dann zu zählen. Des weiteren habe ich den Vorschlag gemacht, dass doch in Zukunft diese Eingabe nur noch per Kombifeld mit einigen Auswahlmöglichkeiten möglich sein sollte, damit das ganze in Zukunft einfacher wird.
0 Punkte
Beantwortet von marie Experte (2k Punkte)
Hallo Shafty,

habe leider eben erst deine Frage gelesen, weil schon so zahlreiche Antworten da waren hab ich nicht früher reingeschaut.

mein problem ist einfach momentan wie ich jetzt erstmal die 1 zuweise. mein ansatz oben funktioniert doch nicht, weil man anscheinend nicht unbegrenzt viele IF... kombinieren kann.


Das geht ganz einfach und unkompliziert:

Du legst Dir eine externe Datenbank mit einem Schlüsselverzeichnis an. In Dieser Datenbank hast Du Deine Kategorien, wie Du sie haben möchtest und gleichzeitig kannst Du auch die einzelnen Zeitungen zum Beispiel einlesen und umbennen, damit sie einheitliche Bezeichnungen haben. Du hast also in deiner externen DB zum Beispiel die Spalten
ID Bereich Textkorrekt
1 Zeitung FAZ
2 Zeitung Welt


oder wie auch immer Du es haben willst (so wie Du es jetzt in deinem Kombifeld vorgibst), dann legst Du eine Tabelle "Schlüssel" mit den Spalten

Bereich Textkorrekt textunbekannt

an.

Jetzt durchläufst du per Code eine Abfrage, wo Du die unbekannten Kürzel alle gruppiert drin hast, und vergibst dann für jedes Kürzel per Mausklick eines aus deinem Kombifeld und hängst das an deine Schlüsseltabelle an. Die sieht dann zum Beispiel so aus:

Bereich Textkorrekt textunbekannt
Zeitung FAZ Frankurter
Zeitung FAZ Fr. Allg. Zeitung
Zeitung FAZ frankf. Allg.
Zeitung FAZ Frankurter Allg.

usw. Danach hast Du für tausende von Abkürzungen nur eine einzige Aktualisierungsabfrage:
Du durchläufst sämtliche Datensätze und ersetzt den Ausdruck aus der Spalte textunbekannt mit dem Ausdruck Textkorrekt. Musst halt zum Verschlüsseln eine Messagebox anzeigen mit allen in Frage kommenden Möglichkeiten (Deine Kombibox) und alle vorkommenden Abkürzungen an deine Tabelle anhängen.

Du kannst natürlich dann genausogut jedem seine dämliche Abkürzung lassen und für Deine Statistik trotzdem die Ergebnisse oder Summen aus deiner Spalte "Textkorrekt" entnehmen.

Hoffe ich habe mich verständlich genug ausgedrückt, wenn nicht frag bitte nochmal nach.

gruß Marie
...