SQL Anweisung Kundengruppe

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Tolle Antwort. Die Adressen der Kunden aus der tAdresse soll es in die gleiche Tabelle importieren wie die Adressen der Ansprechpartner aus tAnsprechpartner, die Ansprechpartner werden aber nicht importiert
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.305
361
Soweit ich sehe holt es aber die einzelnen Ansprechpartner nicht mit ab
Spiel das Ganze doch mal ganz klassisch mit Papier und Bleistift durch.

Was machst du denn mit deiner obigen Abfrage?
Du fragst bestimmte Zeilen aus tAdresse ab und was machst du dann mit dem JOIN?
Du kombinierst mit den gefundenen Zeilen bestimmte Spalten aus tAnsprechpartner, tKunde und tKundenGruppe. Aber was du wirklich machen willst ist doch:
zusätzlich zu den gefundenen Zeilen aus tadresse auch noch weitere Zeilen aus tansprechpartner raussuchen
Der JOIN kombiniert Spalten von zwei Tabellen und UNION kombiniert Zeilen von zwei Queries. Du musst im Endeffekt also zwei Abfragen machen und die mit Union zu einer großen Ergebnisliste verknüpfen. So in der Art SELECT *FROM tAdresse UNION SELECT * FROM tAnsprechpartner
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
verstehe ich nicht, was soll ich mit Papier und Bleistift machen?

Ich benötige die Abfrage wie oben. Das funktioniert soweit für die Kunden gut. Aber ich benötige dazu auch die Daten aus der tAnsprechpartner in die gleiche Tabelle importiert. Also Ansprechpartner.Name etc.

Ist das klar ausgedrückt oder ist es noch unverständlich? Ich bin kein Profi im SQL ... leider.
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.305
361
Du bildest oben in deiner Abfrage ein kartesisches Produkt.
Aber was du eigentlich machen willst, ist zwei Ergebnismengen verketten.
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.305
361
wie gesagt, ich bin Laie in dieser Sache. Ich benötige also den Code dafür.
Hab ich dir oben in der Antwort geschrieben. Ich dachte, dir ist viel mehr geholfen, wenn ich dir nur sage, welche Werkzeuge du benutzen musst, anstatt dir den Tisch fix und fertig zusammen zuschrauben.
Sorry -bin da von mir ausgegangen (denn ich will immer dazulernen ;))

Also: du brauchst hier zwei Abfragen. Einmal die Abfrage aus tAdresse und einmal die Abfrage aus tAnsprechpartner. Die Ergebnisse dieser zwei Abfragen verkettest du dann mit UNION und hast dann im Ergebnis eine Liste mit Datensätzen aus tAdresse und zusätzlich die Datensätze aus tAnsprechpartner.
Also im Prinzip dasselbe wie wenn du erst Liste1 in deinen Mailer importierst und dann Liste2 ;)
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.305
361
Danke für den Tipp, aber wie gesagt, ich bin Laie und suche jemand der mir den Code kurz schreibt
Ach so. Da hab ich dein Anliegen ursprünglich wohl falsch vestanden. SORRY :)

Prinzipiell sollte dir da jeder IT Dienstleister, der sich mit SQL auskennt weiterhelfen können.
Von Vorteil wäre aber jemand, der sich mit JTL auskennt und weiß wie & wo welche Daten in der Datenbank liegen, bzw. wann & warum sich was ändert. Solche JTL-Servicepartner sind auch hier im Forum unterwegs.

Ein andere Ansatz wäre evtl noch ganz vom SQL weg zu gehen und gar nicht versuchen, unmittelbar auf die Datenbank zuzugreifen. Mit der Ameise lassen sich ja auch sehr viele Daten exportiern und Bedingungen, Filter, Sortierungen u.ä. kann man dann als Exportvorlage abspeichern und immer wieder auch automatisiert ausführen.
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Danke …. Ameise wurde hier schon benannt , ich suche aber die direkte Anbindung und hatte gehofft eben hier im JTL Forum
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Ich habe jetzt mal so agiert:

SELECT distinct(tAdresse.cMail), tAdresse.cName,tAdresse.cVorname,tAdresse.cFirma, tKundenGruppe.cName
FROM tAdresse
left join tKunde on tkunde.kKunde=tAdresse.kKunde
left join tKundenGruppe on tkunde.kKundenGruppe=tKundenGruppe.kKundenGruppe where tAdresse.cMail is not null and tkundengruppe.cname <> 'Amazon' and tAdresse.cMail <> ''

union

SELECT distinct(tAnsprechpartner.cMail), tAnsprechpartner.cName,tAnsprechpartner.cVorname,tAnsprechpartner.cAnrede, tAnsprechpartner.cTel
FROM tAnsprechpartner
where tAnsprechpartner.cMail is not null and tAnsprechpartner.cMail <> ''

Ich musste hier natürlich privisorisch die tel Nr. aus den Ansprechpartnern mit übernehmen, da bei Union die Anzahl der Felder gleich sein muss. Die tel. Nr. wird jetzt natürlich in der Spalte Kundengruppe mit eingereicht., Wie kann ich das ändern so das hier auch die Kundengruppe für die Ansprechpartner mit abgerufen und in die Kundengruppe eingetragen wird?
 

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.305
361
Ich hab gerade keinen Zugriff auf einen SQL-Server, deshalb kann ich nichts testen. Daher hier nur Stichworte als Anmerkung:
  • In dem ersten SELECT auf tAdresse bekommst du doch die Kundengruppe nur deshalb, weil du den JOIN gemacht hast. Also müsstest du doch beim zweiten SELECT auch einen JOIN machen...
  • Mache aber nicht zwei SELECT mit jeweils demselben JOIN, um die dann mit Union zu verbinden, sondern mach besser zuerst den UNION und erst dann (und nur einmal) den JOIN. Benutze dazu eine abgeleitete Tabelle (beliebiger Name, hier z.B. "foo")
  • Ich würde UNION ALL anstatt UNION benutzen, um zu vermeiden das die Ergebnismengen sortiert werden. Allerdings weiß ich auch nicht genau wie deine Daten aussehen
  • Ich weiß auch nicht genau, warum du den DISTINCT Befehl verwendest. Distinct sollte man wenn es geht vermeiden. Prüfe, ob du dasselbe nicht durch ein GROUP BY erreichen kannst. Oft lässt sich eine Abfrage durch die Vermeidung von DISTINCT um ein vielfaches beschleunigen.
  • wie auch immer deine Abfrage nachher aussieht: schau dir auf jeden Fall den Ausführungsplan an. Vielleicht fällt dir dann was auf, wie/wo du die Abfrage noch optimieren kannst.
  • Und bevor du beginnst, alles selber zu machen, schau mal nach ob die 1.7 nicht vielleicht schon einen VIEW mitbringt, der genau das macht, was du willst.
Vom Prinzip her würde ich die Abfrage so in der Art schreiben (Ausformulieren bzw. Optimieren musst du aber selber, da ich keine 1.7 habe und nicht testen kann):

Code:
SELECT *
FROM  ( SELECT .... FROM tAdresse UNION ALL SELECT ... FROM tAnsprechpartner ) foo
JOIN tKundengruppe kg ON foo.kKunde = kg.kKunde
 
  • Gefällt mir
Reaktionen: absolutbad

mh1

Sehr aktives Mitglied
4. Oktober 2020
1.305
361
Ich habe mir das jetzt mal spaßeshalber in meiner 1.5 angekuckt.
Vorausgesetzt die Datenstruktur ist in deiner 1.7 gleich, dann kommst du so an die Emailadressen:
SQL:
SELECT foo.kKunde, foo.cName, foo.cMail, kg.cName
FROM
 (
  SELECT kKunde, cName, cMail FROM  tAdresse WHERE NULLIF(cMail, '') IS NOT NULL
  UNION ALL
  SELECT kKunde, cName, cMail FROM tAnsprechpartner WHERE NULLIF(cMail, '') IS NOT NULL
 ) foo
LEFT JOIN tKunde k ON foo.kKunde = k.kKunde
LEFT JOIN tKundengruppe kg ON k.kKundenGruppe = kg.kKundenGruppe

Wenn ich es noch richtig in Erinnerung habe, willst du diese Daten in ein Emailprogramm einspielen bzw, das Emailprogramm dauerhaft anbinden.
Dazu solltest du aber vorher klären, wie dieses Emailprogramm mit Duplikaten umgeht.

Und was passiert, wenn sich ein Kunde vom Newsletter abmeldet? Wird dann die Emailadresse im Mailprogramm gelöscht? Wie stellst du dann sicht, dass diese Emailadresse nicht wieder über das SQL ins Emailprogramm kommt?
 

Brossi66

Aktives Mitglied
12. Juli 2017
52
0
Ich habe mir das jetzt mal spaßeshalber in meiner 1.5 angekuckt.
Vorausgesetzt die Datenstruktur ist in deiner 1.7 gleich, dann kommst du so an die Emailadressen:
SQL:
SELECT foo.kKunde, foo.cName, foo.cMail, kg.cName
FROM
 (
  SELECT kKunde, cName, cMail FROM  tAdresse WHERE NULLIF(cMail, '') IS NOT NULL
  UNION ALL
  SELECT kKunde, cName, cMail FROM tAnsprechpartner WHERE NULLIF(cMail, '') IS NOT NULL
 ) foo
LEFT JOIN tKunde k ON foo.kKunde = k.kKunde
LEFT JOIN tKundengruppe kg ON k.kKundenGruppe = kg.kKundenGruppe

Wenn ich es noch richtig in Erinnerung habe, willst du diese Daten in ein Emailprogramm einspielen bzw, das Emailprogramm dauerhaft anbinden.
Dazu solltest du aber vorher klären, wie dieses Emailprogramm mit Duplikaten umgeht.

Und was passiert, wenn sich ein Kunde vom Newsletter abmeldet? Wird dann die Emailadresse im Mailprogramm gelöscht? Wie stellst du dann sicht, dass diese Emailadresse nicht wieder über das SQL ins Emailprogramm kommt?
Das klingt schon mal sehr gut. Ich habe es jetzt wie folgt ergänzt:


SELECT foo.kKunde, foo.cAnrede, foo.cVorname, foo.cName, foo.cMail, kg.cName
FROM
(
SELECT kKunde, cAnrede, cVorname, cName, cMail FROM tAdresse WHERE NULLIF(cMail, '') IS NOT NULL
UNION ALL
SELECT kKunde, cAnrede, cVorname, cName, cMail FROM tAnsprechpartner WHERE NULLIF(cMail, '') IS NOT NULL
) foo
LEFT JOIN tKunde k ON foo.kKunde = k.kKunde
LEFT JOIN tKundengruppe kg ON k.kKundenGruppe = kg.kKundenGruppe

Jetzt benötige ich noch den Firmennamen aus den Adressen mit. Kann ich aber so nicht da gleich viele Argumente benötigt werden und es in tAnsprechpartner ja das Feld cFirma nicht gibt. Was kann ich tun?
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Kundendatenimport via SQL JTL-Wawi 1.6 1
SQL Abfrage für verkaufte Artikel + aktueller Bestand JTL-Wawi 1.8 1
Neu SQL Ausgabe Bestellinformationen JTL Ameise - Eigene Exporte 4
Neu SQL Script - geänderte Tabellen. User helfen Usern - Fragen zu JTL-Wawi 3
Wie kann ich etwas in der WAWI Datenbank per SQL ändern? JTL-Wawi 1.8 2
Datenbank-Abfrage per SQL nach Lagermenge pro Artikel & Warenbereich (WMSLager) JTL-Wawi 1.8 1
Neu Logfile: SQL Fehler, aber warum? JTL-Shop - Fehler und Bugs 2
Beantwortet #GEFUNDEN# Suche jemand , der uns eine (automatische) SQL Abfrage erstellen kann mit Mail Ausgabe Dienstleistung, Jobs und Ähnliches 2
Neu Erstinstallation JTL WaWi 1.8.12 - heruntergeladen wird SQL Express 2017 _statt_ der empfohlenen 2022 Version Installation von JTL-Wawi 8
Neu MS SQL Server 2022 oder MS SQL Server 2022 Express? Installation von JTL-Wawi 8
Neu SQL-Fehler bei Volltextsuche und Sonderzeichen JTL-Shop - Fehler und Bugs 0
Neu SQL-Abfrage bei Kundenanlage JTL-Wawi 1.7 2
Neu einfache SQL Verknüfpung zweier Tabellen, z.B. Artikel mit ArtikelBeschreibung 1.6.46.1 Gelöste Themen in diesem Bereich 13
Neu CSV-Datei direkt in einer SQL-Abfrage verwenden User helfen Usern - Fragen zu JTL-Wawi 3
Neu SQL Ausgabe der Varko-Auswahl eines Artikels, mehrsprachig Tabelle zwei mal auf sich Joinen? User helfen Usern - Fragen zu JTL-Wawi 5
Neu SQL Abfrage in Excel User helfen Usern - Fragen zu JTL-Wawi 12
Neu SQL-Erfahrene vor - Nach Datenrettung - fehlende Aufträge lassen sich nicht einfügen - Ideen? User helfen Usern 4
Neu Nach Installation eines neuen SQL Servers klappt die Verbindung vom Benutzer-PC zum Server-PC nicht mehr. Installation von JTL-Wawi 5
Neu Fehler SQL-Schema importieren bei Neuinstallation Installation / Updates von JTL-Shop 7
Neu Update MS SQL 2014 auf MS SQL 2022 User helfen Usern - Fragen zu JTL-Wawi 0
Neu SQL Abfrage Artikelbezeichnung auf Englisch für Artikeletikett User helfen Usern - Fragen zu JTL-Wawi 4
Neu Datenbankebene per SQL löschen Eigene Übersichten in der JTL-Wawi 6
Neu MS SQL 14 Express wird langsam voll. Welche Lienzen benötigen wir? Bitte um Hilfe Eigene Übersichten in der JTL-Wawi 27
Neu SQL Abfrage wird mehrfach ausgeführt - Ausgabe in der Übersicht falsch Eigene Übersichten in der JTL-Wawi 8
Upgrade von SQL Server 2014 auf höhere Version JTL-Wawi 1.8 4
1.8.11.0 - Worker SQL lässt System hängen JTL-Wawi 1.8 0
Neu List&Label Merkmale auf Etiketten (SQL) Gelöste Themen in diesem Bereich 3
Neu SQL Server Express 2017 auf 2022 Update Installation von JTL-Wawi 10
Neu Nach SQL Server neuinstallation Benutzer gelöscht? JTL-Wawi - Fehler und Bugs 3
Neu Versandart + Zahlungsart in Rechnungskorrektur (SQL) User helfen Usern - Fragen zu JTL-Wawi 10
SQL Abfrage via Ameise: Seriennummer u. weitere Daten JTL-Wawi 1.8 0
1.8.10.0 - SQL-Job Performance-Optimierung JTL-Wawi 1.8 24
In Diskussion Liquid error: Parameteranzahlkonflikt bei einer einfachen Anweisung Gelöste Themen in diesem Bereich 3
Kundengruppe löschen JTL-Wawi 1.7 6
Versandbenachrichtigung Kundengruppe JTL-Wawi 1.7 0

Ähnliche Themen