Neu abweichende Lieferadressen aus Db auslesen

volvisti

Sehr aktives Mitglied
18. Juli 2017
317
43
Hallo zusammen,
in diesem Beitrag (Link dahin) geht es um ein ähnliches Thema, wie das das mir gerade Knoten im Hirn verursacht.

Was ich brauche, ist eigentlich "nur" ein SQL-Statement für eine Access-Abfrage mit dem ich folgendes erreiche:
Anzeige aller Adressen (Kunden, bzw. Lieferadressen), die
- der Kundengruppe 3 angehören
- bei denen ein bestimmtes Attribut gesetzt ist
- deren Vorname oder Name oder Strasse oder PLZ oder Ort in tkunde von denen in tadresse abweicht
-- hier sollen dann die Daten aus tadresse genommen werden (bei mehreren die Standardlieferadresse)
--- es sei denn die Lieferadresse ist eigentlich leer (passiert, wenn man in der Kundenverwaltung auf Lieferanschrift klickt und ohne zu speichern wieder verläßt)

Hintergrund ist, dass ich etwa 1600 Adressen von einem anderen Dienstleister übernommen habe und diese teils abweichende, teils identische und teils keine Lieferadressen haben.
Ich brauche aber für einen regelmäßigen Großversand die entsprechenden Kunden-/Lieferadressen.
Die Adressen werden in JTL gepflegt (sind teilweise auch Shopkunden) in Access per ODBC-Anbindung aus der Datenbank ausgelesen und entsprechend weiterverarbeitet.

Im oben genannten Beitrag werden Nachname, Firma und Strasse abgeglichen und ein Statustext in tBestellung eingetragen. Das nutzt mir leider nichts, da die Adressen über die Ameise und nicht über den Shop eingeflossen sind, es folglich keine Bestellung gibt.
Ausserdem kommt es vor, dass nur der Vorname abweicht, was von dem Script nicht erfasst würde.

Ich hoffe, ich habe das Problem gut genug konkretisiert und Ihr könnt mir helfen.

Besten Dank schon mal
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
969
347
Hallo zusammen,
in diesem Beitrag (Link dahin) geht es um ein ähnliches Thema, wie das das mir gerade Knoten im Hirn verursacht.

Was ich brauche, ist eigentlich "nur" ein SQL-Statement für eine Access-Abfrage mit dem ich folgendes erreiche:
Anzeige aller Adressen (Kunden, bzw. Lieferadressen), die
- der Kundengruppe 3 angehören
- bei denen ein bestimmtes Attribut gesetzt ist
- deren Vorname oder Name oder Strasse oder PLZ oder Ort in tkunde von denen in tadresse abweicht
-- hier sollen dann die Daten aus tadresse genommen werden (bei mehreren die Standardlieferadresse)
--- es sei denn die Lieferadresse ist eigentlich leer (passiert, wenn man in der Kundenverwaltung auf Lieferanschrift klickt und ohne zu speichern wieder verläßt)

Hintergrund ist, dass ich etwa 1600 Adressen von einem anderen Dienstleister übernommen habe und diese teils abweichende, teils identische und teils keine Lieferadressen haben.
Ich brauche aber für einen regelmäßigen Großversand die entsprechenden Kunden-/Lieferadressen.
Die Adressen werden in JTL gepflegt (sind teilweise auch Shopkunden) in Access per ODBC-Anbindung aus der Datenbank ausgelesen und entsprechend weiterverarbeitet.

Im oben genannten Beitrag werden Nachname, Firma und Strasse abgeglichen und ein Statustext in tBestellung eingetragen. Das nutzt mir leider nichts, da die Adressen über die Ameise und nicht über den Shop eingeflossen sind, es folglich keine Bestellung gibt.
Ausserdem kommt es vor, dass nur der Vorname abweicht, was von dem Script nicht erfasst würde.

Ich hoffe, ich habe das Problem gut genug konkretisiert und Ihr könnt mir helfen.

Besten Dank schon mal
Hallo,
dieser Skript gibt ALLE abweichenden Lieferadressen, weil es nicht immer eine Standardlieferadresse gibt.
Kundengruppe = 3 und Kundenattribut ist 'Test' mit dem Wert 'Test'
Die Ausgabe ist gruppiert.
SQL:
SELECT kunde.[kKunde]
      ,[cKundenNr]
      ,CASE WHEN adresse.cVorname<>kunde.cVorname THEN adresse.cVorname ELSE kunde.cVorname END AS Vorname
   ,CASE WHEN adresse.cName<>kunde.cName THEN adresse.cName ELSE kunde.cName END AS Name
   ,CASE WHEN adresse.cStrasse<>kunde.cStrasse THEN adresse.cStrasse ELSE kunde.cStrasse END AS Strasse
   ,CASE WHEN adresse.cPLZ<>kunde.cPLZ THEN adresse.cPLZ ELSE kunde.cPLZ END AS PLZ
      ,[cEMail]
      ,MAX([cAktiv]) as Aktiv
  FROM [eazybusiness].[dbo].[tkunde] kunde
  INNER JOIN eazybusiness.dbo.tKundenAttribute kundeattrib ON kundeattrib.kKunde=kunde.kKunde
  INNER JOIN eazybusiness.dbo.tadresse adresse ON adresse.kKunde=kunde.kKunde
  WHERE kKundenGruppe=3
  AND kundeattrib.cName='Test' AND kundeattrib.cValue='Test'
  AND (adresse.cVorname<>kunde.cVorname OR adresse.cName<>kunde.cName OR adresse.cStrasse<>kunde.cStrasse OR adresse.cPLZ<>kunde.cPLZ)
  AND (adresse.cVorname IS NOT NULL AND adresse.cName IS NOT NULL AND adresse.cStrasse IS NOT NULL AND adresse.cPLZ IS NOT NULL)
  GROUP BY kunde.[kKunde], cKundenNr
      ,CASE WHEN adresse.cVorname<>kunde.cVorname THEN adresse.cVorname ELSE kunde.cVorname END
   ,CASE WHEN adresse.cName<>kunde.cName THEN adresse.cName ELSE kunde.cName END
   ,CASE WHEN adresse.cStrasse<>kunde.cStrasse THEN adresse.cStrasse ELSE kunde.cStrasse END
   ,CASE WHEN adresse.cPLZ<>kunde.cPLZ THEN adresse.cPLZ ELSE kunde.cPLZ END
      ,[cEMail]
  ORDER BY cKundenNr, Vorname, Name, Strasse, PLZ
 

volvisti

Sehr aktives Mitglied
18. Juli 2017
317
43
Hallo mvh,
vielen herzlichen Dank für Deine Arbeit.
Basierend darauf habe ich das Script etwas erweitert und an die Schreibweise von Access 2007 angepasst.

Nun sieht es so aus:

SELECT kunde.kKunde,
kunde.cKundenNr,
IIf([adresse].[cFirma]<>[kunde].[cFirma],[adresse].[cFirma],[kunde].[cFirma]) AS Firma,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]) AS Anrede,
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]) AS Titel,
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]) AS Vorname,
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]) AS Name,
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]) AS Strasse,
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]) AS PLZ,
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]) AS ORT,
kunde.cEMail AS EMail
FROM (dbo_tkunde AS kunde INNER JOIN dbo_tKundenAttribute AS attribut ON kunde.[kKunde] = attribut.[kKunde]) INNER JOIN dbo_tadresse AS adresse ON kunde.[kKunde] = adresse.[kKunde]

WHERE (((adresse.cVorname)<>[kunde].[cVorname] And (adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName)<>[kunde].[cName] And (adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse)<>[kunde].[cStrasse] And (adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ)<>[kunde].[cPLZ]
And (adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt)<>[kunde].[cOrt]
And (adresse.cOrt) Is Not Null))
GROUP BY kunde.[kKunde],
kunde.cKundenNr,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]),
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]),
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]),
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]),
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]),
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]),
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]),
kunde.cEMail,
IIf(adresse.cFirma<>kunde.cFirma,adresse.cFirma,kunde.cFirma),
kunde.cAktiv, kunde.cSperre HAVING (((kunde.cAktiv)="y") AND ((kunde.cSperre)="n"))
ORDER BY kunde.cKundenNr, Vorname, Name, Strasse, PLZ, Ort;


Es kommen jetzt zwar noch Parameterabfragen für die IIF- Variablen, aber ansonsten erhalte ich das gleiche Ergebnis, wie mit Deinem (durch micht etwas erweiterten) Statement in Heidi-SQL. :thumbsup:
Wenn jemand noch eine Idee hat, wie die Parameterabfragen wegzubekommen sind....

Jetzt fehlen mir zu meinem Glück nur noch die restlichen Adressen. Also die, die den Paramtern Attribut und Kundengruppe, wie oben benannt, entsprechen und jene mit Deinem Script ermittelten ausschliessen.
Ist es vermessen Dich darum zu bitten?

Besten Dank nochmal

P.S.: Irgendwie ist SQL doch durchaus übersichtlicher. :oops:
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
969
347
Hallo mvh,
vielen herzlichen Dank für Deine Arbeit.
Basierend darauf habe ich das Script etwas erweitert und an die Schreibweise von Access 2007 angepasst.

Nun sieht es so aus:

SELECT kunde.kKunde,
kunde.cKundenNr,
IIf([adresse].[cFirma]<>[kunde].[cFirma],[adresse].[cFirma],[kunde].[cFirma]) AS Firma,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]) AS Anrede,
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]) AS Titel,
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]) AS Vorname,
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]) AS Name,
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]) AS Strasse,
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]) AS PLZ,
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]) AS ORT,
kunde.cEMail AS EMail
FROM (dbo_tkunde AS kunde INNER JOIN dbo_tKundenAttribute AS attribut ON kunde.[kKunde] = attribut.[kKunde]) INNER JOIN dbo_tadresse AS adresse ON kunde.[kKunde] = adresse.[kKunde]

WHERE (((adresse.cVorname)<>[kunde].[cVorname] And (adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName)<>[kunde].[cName] And (adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse)<>[kunde].[cStrasse] And (adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ)<>[kunde].[cPLZ]
And (adresse.cPLZ) Is Not Null) AND ((adresse.cOrt) Is Not Null))
OR (((adresse.cVorname) Is Not Null) AND ((kunde.kKundenGruppe)=3) AND ((attribut.cName)='bis') AND ((adresse.cName) Is Not Null) AND ((adresse.cStrasse) Is Not Null) AND ((adresse.cPLZ) Is Not Null) AND ((adresse.cOrt)<>[kunde].[cOrt]
And (adresse.cOrt) Is Not Null))
GROUP BY kunde.[kKunde],
kunde.cKundenNr,
IIf([adresse].[cAnrede]<>[kunde].[cAnrede],[adresse].[cAnrede],[kunde].[cAnrede]),
IIf([adresse].[cTitel]<>[kunde].[cTitel],[adresse].[cTitel],[kunde].[cTitel]),
IIf([adresse].[cVorname]<>[kunde].[cVorname],[adresse].[cVorname],[kunde].[cVorname]),
IIf([adresse].[cName]<>[kunde].[cName],[adresse].[cName],[kunde].[cName]),
IIf([adresse].[cStrasse]<>[kunde].[cStrasse],[adresse].[cStrasse],[kunde].[cStrasse]),
IIf([adresse].[cPLZ]<>[kunde].[cPLZ],[adresse].[cPLZ],[kunde].[cPLZ]),
IIf([adresse].[cOrt]<>[kunde].[cOrt],[adresse].[cOrt],[kunde].[cOrt]),
kunde.cEMail,
IIf(adresse.cFirma<>kunde.cFirma,adresse.cFirma,kunde.cFirma),
kunde.cAktiv, kunde.cSperre HAVING (((kunde.cAktiv)="y") AND ((kunde.cSperre)="n"))
ORDER BY kunde.cKundenNr, Vorname, Name, Strasse, PLZ, Ort;


Es kommen jetzt zwar noch Parameterabfragen für die IIF- Variablen, aber ansonsten erhalte ich das gleiche Ergebnis, wie mit Deinem (durch micht etwas erweiterten) Statement in Heidi-SQL. :thumbsup:
Wenn jemand noch eine Idee hat, wie die Parameterabfragen wegzubekommen sind....

Jetzt fehlen mir zu meinem Glück nur noch die restlichen Adressen. Also die, die den Paramtern Attribut und Kundengruppe, wie oben benannt, entsprechen und jene mit Deinem Script ermittelten ausschliessen.
Ist es vermessen Dich darum zu bitten?

Besten Dank nochmal

P.S.: Irgendwie ist SQL doch durchaus übersichtlicher. :oops:

Hallo,
für Access 2007 entferne bitte die eckigen Klammern [ ] , sonst sind es Parameter und keine Felder.
Mein Code war für SQL Server, dort sind die [ und ] Feldtrennzeichen.
Viele Grüße, Ihr mvh-Team
 

volvisti

Sehr aktives Mitglied
18. Juli 2017
317
43
Hallo mvh-Team,
hmmm, hab jetzt alle [ ] entfernt. trotzdem fragt die Abfrage beim Öffnen noch die Parameter ab.
Komischerweise nur Vorname, Name, Strasse, PLZ und Ort.
Anrede, Titel und Firma werden nicht abgefragt. :-$
Hab das Statement dreimal durchsucht und keine [ ] mehr gefunden.

Hast Du noch eine Idee?

Danke Dir
 

mvh

Sehr aktives Mitglied
26. Oktober 2011
969
347
Hallo mvh-Team,
hmmm, hab jetzt alle [ ] entfernt. trotzdem fragt die Abfrage beim Öffnen noch die Parameter ab.
Komischerweise nur Vorname, Name, Strasse, PLZ und Ort.
Anrede, Titel und Firma werden nicht abgefragt. :-$
Hab das Statement dreimal durchsucht und keine [ ] mehr gefunden.

Hast Du noch eine Idee?

Danke Dir
Hallo,
ich habe den SQL-Code für Access 2007 an dich gesendet, so hast du keine Parameter-Abfrage mehr.

Du hast in deinem SQL noch die Kundengruppe und Kundenattribut vergessen,
hier die WHERE-Klausel für Kunden-Gruppe 3 und Kunden-Attribut 'Test' mit dem Wert 'Test'
WHERE kKundenGruppe=3 AND kundeattrib.cName='Test' AND kundeattrib.cValue='Test'
Mit freundlichen Grüßen, Ihr mvh-Team
 
Ähnliche Themen
Titel Forum Antworten Datum
Neu Rechnung- UND ALLE Lieferadressen in Kundenübersicht sichtbar JTL-Wawi - Ideen, Lob und Kritik 11
JTL 1.11 aus Downloads und Supportseite verschwunden / ZugFerd Ausgabe geändert? JTL-Wawi 1.11 2
OnePageComposer - diverse HTML-Tags werden aus Richtext automatisch gelöscht Einrichtung JTL-Shop5 4
Neu Heute wied kein Versand bei Amazon bestätigt und manueller Abgleich gibt Fehlermeldung aus Amazon-Anbindung - Fehler und Bugs 1
Neu Wie kommen die Versandarten aus JTL-Wawi in den JTL-Shop? Betrieb / Pflege von JTL-Shop 7
Neu Artikeletiketten aus einem Aftrag heraus druckbar machen JTL-Wawi - Ideen, Lob und Kritik 1
Produkt-API v4 Support bei OTTO läuft aus (10.12.2025) – Zukunft mit JTL Wawi unklar Otto.de - Anbindung (SCX) 16
Neu (Bank-)Rückzahlungen aus der Wawi heraus nicht mehr möglich JTL-Wawi - Fehler und Bugs 2
Neu KI-WaWi-Workflows: Eigene KI-Endpunkte direkt aus JTL-Workflows ansprechen – ohne Plugin, flexibel und schnell Dienstleistung, Jobs und Ähnliches 3
Neu Verkäufe aus LS-Pos werden nicht mehr in der Wawi angezeigt Fragen rund um LS-POS 2
Neu Blog Kategorie nicht erstelbbar "Bitte füllen Sie alle Pflichtfelder korrekt aus." JTL-Shop - Fehler und Bugs 4
Neu Artikel lassen sich nicht aus Shopify Store löschen Shopify-Connector 4
Neu Bei allen Artikeln aus einer Execlliste die Lieferzeiten einheitlich setzen. JTL-Wawi 1.6 4
Neu Aus JTL Wawi übernommene Aufträge in JTL POS ergänzen JTL-POS - Ideen, Lob und Kritik 0
Neu Automatische Datenübernahme aus Wawi-HTML in den Shop verhindern Hallo zusammen, Allgemeine Fragen zu JTL-Shop 3
Neu Shop 5 globale Variable die aus der Wawi gefüllt wird? Allgemeine Fragen zu JTL-Shop 0
Neu Import aus Billbee und Schnittstelle zu Strato Smartwebshop Schnittstellen Import / Export 4
Neu Frage: Artikelimport aus Amazonlisting von Drittanbietern User helfen Usern - Fragen zu JTL-Wawi 4
Neu Mittels Ameise Aufträge aus 2 einzelnen CSV Dateien erstellen Schnittstellen Import / Export 5
Neu Enorme Anfragen/Aufrufe vorw. aus Brasilien, Zugriffe auf Merkmalfilter Allgemeine Fragen zu JTL-Shop 4
Neu Portlet - Zugriff auf Settings aus dem Adminbereich Technische Fragen zu Plugins und Templates 0
kann man inzwischen aus der Wawi auf kaufland Varianten bilden, wenn ja, ab welcher Version? kaufland.de - Anbindung (SCX) 0
Buchhalterische Abwicklung von Gutscheinen aus Rechnungskorrekturen Allgemeine Fragen zu JTL-Vouchers 0
Neu Rechnungskorrektur direkt aus „Verkauf → Aufträge → Mit Rechnung“ möglich? Arbeitsabläufe in JTL-Wawi 2
Webinar: So sieht ein vollständiges E-Commerce-Steuersetup wirklich aus - mit SKULD & countX am 25.09.25 Messen, Stammtische und interessante Events 0
Neu Entfernung von Elementen aus dem Template Templates für JTL-Shop 1
Neu Bestellungen aus der Vergangenheit Shopify-Connector 3
Kunden UStID wird nicht aus Amazon in JTL übermittelt Amazon-Anbindung - Fehler und Bugs 4
Neu Freitexte aus Shopware in JTL Allgemeine Fragen zu JTL-Shop 7
Beantwortet Workflow löst nicht aus, obwohl alle Bedingungen erfüllt JTL-Workflows - Fehler und Bugs 1
Neu JTL WaWai Artikel aus Angebote von Plattformen Amazon+Otto erstellen Einrichtung und Installation von JTL-eazyAuction 0

Ähnliche Themen